Hirdetés

Új hozzászólás Aktív témák

  • thboxx
    aktív tag

    Ha hozzáadtad a c:\Windows\System32 elérési utat, onnantól kezdve el kell tudni érned a parancssorból a java.exe-t és a javaw.exe-t. Nem írhat olyat, hogy nem találja ezt a programot. Ha ezt írja, akkor vagy nem jól adtad hozzá, vagy nem indítottad újra a parancssort, miután hozzáadtad.
    Egyébként nagyon kevés elérési út van nálad a path környezeti változóban. A systemrootnak defaulton ott kéne lennie. Valaki vagy valami "tisztogatást" végzett nálad...

    Hát akkor lehet újrahúzom majd a win-t... Aztán tiszta lappal kezdem. Ha akkor sem megy majd jelentkezem.
    Addig is köszönöm a sok segítséget! :R

  • Superhun
    addikt

    :Y áthoztam öcsémhez... MineCraftozik... minden gond nélkül elindult neki... :W

    Ha hozzáadtad a c:\Windows\System32 elérési utat, onnantól kezdve el kell tudni érned a parancssorból a java.exe-t és a javaw.exe-t. Nem írhat olyat, hogy nem találja ezt a programot. Ha ezt írja, akkor vagy nem jól adtad hozzá, vagy nem indítottad újra a parancssort, miután hozzáadtad.
    Egyébként nagyon kevés elérési út van nálad a path környezeti változóban. A systemrootnak defaulton ott kéne lennie. Valaki vagy valami "tisztogatást" végzett nálad...

  • thboxx
    aktív tag

    "C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files\PC Connectivity Solution\;C:\Program Files\Android\android-sdk\platform-tools\;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files\Windows Live\Shared"

    ezek vannak a path környezeti változóban...

    (#3196) gygabor88: kicsit hétköznapibban fejtsd ki kérlek... :B

    Szerk.: hozzáadtam a system32-t a környezeti változókhoz... de semmi

    :Y áthoztam öcsémhez... MineCraftozik... minden gond nélkül elindult neki... :W

  • thboxx
    aktív tag

    És a c:\Windows\System32 benne van a path környezeti változóban?

    "C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files\PC Connectivity Solution\;C:\Program Files\Android\android-sdk\platform-tools\;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files\Windows Live\Shared"

    ezek vannak a path környezeti változóban...

    (#3196) gygabor88: kicsit hétköznapibban fejtsd ki kérlek... :B

    Szerk.: hozzáadtam a system32-t a környezeti változókhoz... de semmi

  • skoda12
    aktív tag

    Na... ha csak simán a java.exe-hez társítom, kidob egy olyan hibaüzenetet, hogy:

    "Error: could not find or load main class D:\.......jar"

    Parancssor meg megint nem tudja futtatható programként, vagy mi ként felismerni a <java> -t... :U

    "Error: could not find or load main class D:\.......jar"

    Nem minden jar futtathato. Sot, tipikusan a legtobb jar nem futtathato es valoszinuleg te is ilyet kaptal. A masik lehetoseg, hogy az alkalmazas keszitoje rosszul csomagolta be a programot es nincs beallitva main class a manifestben. Ilyenkor ugyan meg elindithatod a programot, de tudnod kell a main class pontos nevet hozza.

  • Superhun
    addikt

    :K Ott vannak... mégsem megy :DDD idegölő kicsit... :o

    Szerk.: bocs, hogy ennyi gondot okozok... szólj, ha húzzak a... :DDD

    És a c:\Windows\System32 benne van a path környezeti változóban?

  • thboxx
    aktív tag

    A c:\Windows\System32 mappában ott kell lenniük a java.exe-nek és a javaw.exe-nek. Ha nincsenek ott, akkor nálad komolyabb problémák vannak...

    :K Ott vannak... mégsem megy :DDD idegölő kicsit... :o

    Szerk.: bocs, hogy ennyi gondot okozok... szólj, ha húzzak a... :DDD

  • Superhun
    addikt

    Na... ha csak simán a java.exe-hez társítom, kidob egy olyan hibaüzenetet, hogy:

    "Error: could not find or load main class D:\.......jar"

    Parancssor meg megint nem tudja futtatható programként, vagy mi ként felismerni a <java> -t... :U

    A c:\Windows\System32 mappában ott kell lenniük a java.exe-nek és a javaw.exe-nek. Ha nincsenek ott, akkor nálad komolyabb problémák vannak...

  • thboxx
    aktív tag

    Kapsz a többinél vmilyen hibaüzenetet a parancssorban?

    Na... ha csak simán a java.exe-hez társítom, kidob egy olyan hibaüzenetet, hogy:

    "Error: could not find or load main class D:\.......jar"

    Parancssor meg megint nem tudja futtatható programként, vagy mi ként felismerni a <java> -t... :U

  • dany27
    őstag

    Üdv!

    JTree-vel szeretném megjeleníteni a településeket megyékre lebontva.
    Hogy tudom azt elérni hogy ha bent vannak a megyék a fában, és tölteném be a településeket egy fileból akkor tudja hogy melyik megye alá kell beszúrnia az adott települést?
    Az megvan hogy hogyan döntöm el hogy melyik megye, csak azt nem hogy ezután hogy tudom megmondani neki hogy na ezt most ide szúrd be szépen...
    Van egy telepulesek osztalyom melynek van egy megyeID adat tagja is, ez alapján könnyen megtudom mondani h az adott megyéhez melyik települések tartoznak.

    Előre is köszi a válaszokat!

  • sztanozs
    veterán

    ÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁ :C :C

    Ezaaaaz!! Most parancssor-ból elindult! 1000 hálám érte!! :R :DD

    Szerk.:

    (#3186) sztanozs: ez az alkalmazás viszont nem indult el, mert hiányzik neki az nspr4.dll...

    nspr4.dll? Ez valami flash szutyok, semmi köze nincs a javához...

  • Superhun
    addikt

    Helyesbítenék... elindult... de azon kívül semmi más... :DDD

    Kapsz a többinél vmilyen hibaüzenetet a parancssorban?

  • thboxx
    aktív tag

    ÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁ :C :C

    Ezaaaaz!! Most parancssor-ból elindult! 1000 hálám érte!! :R :DD

    Szerk.:

    (#3186) sztanozs: ez az alkalmazás viszont nem indult el, mert hiányzik neki az nspr4.dll...

    Helyesbítenék... elindult... de azon kívül semmi más... :DDD

  • thboxx
    aktív tag

    Most arra kérnélek, hogy próbáld konzolból futtatni a jar fájt. Hívj elő egy parancssort, és írd be ezt:

    java -jar "a jar fájl elérési útja"

    Ki fog írni valamilyen hibaüzenetet. Másold be azt ide. Ha túl hosszú, akkor pastebin.com

    ÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁ :C :C

    Ezaaaaz!! Most parancssor-ból elindult! 1000 hálám érte!! :R :DD

    Szerk.:

    (#3186) sztanozs: ez az alkalmazás viszont nem indult el, mert hiányzik neki az nspr4.dll...

  • sztanozs
    veterán

    Próbáltam, de nem megy... Nem értem, mi lehet a probléma... :F

    Próbáld meg tényleg valami desktopos alkalmazással - mondjuk ezzel: [link]
    Ne zavarjon meg a fájlnévben a UNIX rész. Mivel java, így platformfüggetlen - csak azért unix, mert nem települ közvetlenül a windowsba, mint az installeres verzió.

  • Superhun
    addikt

    Próbáltam, de nem megy... Nem értem, mi lehet a probléma... :F

    Most arra kérnélek, hogy próbáld konzolból futtatni a jar fájt. Hívj elő egy parancssort, és írd be ezt:

    java -jar "a jar fájl elérési útja"

    Ki fog írni valamilyen hibaüzenetet. Másold be azt ide. Ha túl hosszú, akkor pastebin.com

  • thboxx
    aktív tag

    Mindenképpen meg kéne nézed más desktop jar alkalmazásokkal is.

    Próbáltam, de nem megy... Nem értem, mi lehet a probléma... :F

  • skoda12
    aktív tag

    Köszönöm az eddigi válaszokat. Közben megoldódott a dolog egy session.clear() oldotta meg a problémát a tranzakció lezárása után.

    "Ez anti-pattern. Mivel desktop approl van szo, gondolom csak egy user hasznalja egyszerre. Boven eleg akkor nyitni uj sessiont, ha az elozo inkonzisztens allapotba kerul."

    Az igaz hogy desktop app, de ez miért is vonja maga után hogy "csak egy user használja egyszerre"?
    Desktop app, de központi adatbázissal dolgozik. Az alkalmazás pedig a felhasználók gépein található meg.

    Egyébként nagy baj az ha egyetlen session-t használok a futás alatt?

    Az architektúra úgynéz ki, hogy vannak a perzisztens osztályok, ez mellett van egy üzleti logikát megvalósító osztály (UzletiLogika) és van a kliens, ami bármi lehet, jelenleg egy desktop swing GUI.
    Az UzletiLogika osztálynak egyetlen statikus adattagja van, ami nem más mint egy Session. Ezen dolgozik az összes metódus. A metódusok a kliens(ek)nek szolgáltatnak adatokat, amik különféle egyszerű és összetett adatszerkezeteket adnak át. A perzisztens osztályok adattagjait alakítják át listákká, vektorokká stb...
    Paraméterül azonosítókat kapnak és soha nem adnak vissza perzisztált objektumot.
    Így az UzletiLogika osztályban dolgozik csak a Hibernate. A GUI csak meghívja az ottani metódusokat és valamilyen nem perzisztens adatot kap, amit megjelenít.

    Most már működik a program.

    A kérdésem az hogy a felvázolt architektúra szerintetek rendben van? Illetve jó megoldás-e az egyetlen session használata?

    "A kérdésem az hogy a felvázolt architektúra szerintetek rendben van? Illetve jó megoldás-e az egyetlen session használata?"

    Mint mondtam, a Session inkonzisztens allapotba kerulhet, igy nem erdemes csak egyet hasznalni. Ez a javadocban is le van irva.
    A masik, hogy a Session nem thread safe, igy leginkabb a session-per-request megoldast szoktak kovetni. De ez nem azt jelenti, hogy ha egy muvelethez tobb select / insert /akarmi kell, akkor mindegyikhez letre kellene hozni egy sessiont.
    A statikus dolgokat felejtsd el, unit tesztelhetetlen. Ritkan van ertelme (konstants, logger, ...), de alapvetoen csak thread safety problemakhoz vezetnek. Jelenleg is tobb kulonbozo metodusod dolgozik egy statikus nem thread safe peldanyon, tehat neked kell gondoskognod rola lockolassal vagy valami mas modon, hogy egyszerre csak egy valaki hasznalja.

  • Superhun
    addikt

    Akkor írom még egyszer, azokon, ÉS ezen ( ami nem telefonos ) kívül más jar fájlom nincs...

    Mindenképpen meg kéne nézed más desktop jar alkalmazásokkal is.

  • thboxx
    aktív tag

    A telefonos jar fájlok persze, hogy nem mennek... Akkor mindvégig ez volt a baj.

    Akkor írom még egyszer, azokon, ÉS ezen ( ami nem telefonos ) kívül más jar fájlom nincs...

  • Superhun
    addikt

    Semmilyen jar fájl nem megy... Mármint ha a telefonos jar fájloknak is mennie kéne így mert azokon, és ezen kívül más jar-om nincs... :(

    Szerk.: igen, társítva lett...

    A telefonos jar fájlok persze, hogy nem mennek... Akkor mindvégig ez volt a baj.

  • thboxx
    aktív tag

    Társítva lett a jar kiterjesztés? Más jar fájlok se mennek?

    Semmilyen jar fájl nem megy... Mármint ha a telefonos jar fájloknak is mennie kéne így mert azokon, és ezen kívül más jar-om nincs... :(

    Szerk.: igen, társítva lett...

  • modder
    aktív tag

    Nálad a pont!

    Valóban a detail osztályból töröltem és nem a parrenten keresztül.
    Kipróbáltam a javaslatodat és rendben van a dolog, ha a szülő osztály Set-jéből remove-olom az elemet. Ekkor már van adatbázis kérés és frissít rendesen!

    Köszi!

    szívesen, érdemes a kapcsolatok mindkét oldalát rendben tartani.
    Meg rászánni az időt, utána olvasni a konfigurálásnak, hogy úgy működjön, ahogy elvárható

  • bucsupeti
    senior tag

    Hogyan törölsz?
    Ha simán törlöd a detail entitást, de nem nem frissíted a parent entitás (a másik táblából) Set-jét és nem mergeled (sorry nem vágom pontosan a hibernate-es terminológiát) őt, akkor a hibernate cache úgy érzékelheti, hogy az objektumon nem történt semmi változás (a kapcsolatot csak az egyik oldalról törölted, a parent felől nem), ezért nincs oka újra lekérdezni olyan result setet mégegyszer.

    Próbáld meg, hogy a parent entitás Set-jéből törlöd a detailt, majd mergeled a parent entitást.

    Remélem ez menni fog.

    Nálad a pont!

    Valóban a detail osztályból töröltem és nem a parrenten keresztül.
    Kipróbáltam a javaslatodat és rendben van a dolog, ha a szülő osztály Set-jéből remove-olom az elemet. Ekkor már van adatbázis kérés és frissít rendesen!

    Köszi!

  • bucsupeti
    senior tag

    Kod nelkul nehez megmondani, hogy mi a baj, de nem nyelsz el egy catch agban egy exceptiont, ami nincs kiloggolva?

    "Új session-t indítok minden egyes lekérdezésre"

    Ez anti-pattern. Mivel desktop approl van szo, gondolom csak egy user hasznalja egyszerre. Boven eleg akkor nyitni uj sessiont, ha az elozo inkonzisztens allapotba kerul.

    Köszönöm az eddigi válaszokat. Közben megoldódott a dolog egy session.clear() oldotta meg a problémát a tranzakció lezárása után.

    "Ez anti-pattern. Mivel desktop approl van szo, gondolom csak egy user hasznalja egyszerre. Boven eleg akkor nyitni uj sessiont, ha az elozo inkonzisztens allapotba kerul."

    Az igaz hogy desktop app, de ez miért is vonja maga után hogy "csak egy user használja egyszerre"?
    Desktop app, de központi adatbázissal dolgozik. Az alkalmazás pedig a felhasználók gépein található meg.

    Egyébként nagy baj az ha egyetlen session-t használok a futás alatt?

    Az architektúra úgynéz ki, hogy vannak a perzisztens osztályok, ez mellett van egy üzleti logikát megvalósító osztály (UzletiLogika) és van a kliens, ami bármi lehet, jelenleg egy desktop swing GUI.
    Az UzletiLogika osztálynak egyetlen statikus adattagja van, ami nem más mint egy Session. Ezen dolgozik az összes metódus. A metódusok a kliens(ek)nek szolgáltatnak adatokat, amik különféle egyszerű és összetett adatszerkezeteket adnak át. A perzisztens osztályok adattagjait alakítják át listákká, vektorokká stb...
    Paraméterül azonosítókat kapnak és soha nem adnak vissza perzisztált objektumot.
    Így az UzletiLogika osztályban dolgozik csak a Hibernate. A GUI csak meghívja az ottani metódusokat és valamilyen nem perzisztens adatot kap, amit megjelenít.

    Most már működik a program.

    A kérdésem az hogy a felvázolt architektúra szerintetek rendben van? Illetve jó megoldás-e az egyetlen session használata?

  • modder
    aktív tag

    Sziasztok!

    Adott egy Hibernate-et és MySQL-t használó NetBeans alatt készített alkalmazás GUI-val.
    Két táblázat van benne, amiket feltöltök a perzisztens objektumokkal. A második táblázat az első detail táblája, azaz az egyik adattagja (ami Set típusú) tételeit tartalmazza.
    A lényeg az hogy ha törlök valamit a detail táblából akkor látom az SQL parancsot (delete) az output ablakban. Az SQL adatbázist megnézve látszik hogy törlődött a rekord, viszont a vizuális komponensben (jTable) nem látszik a frissítés. Természetesen újra feltöltöm a táblát, de nem frissül. Olyan mintha valahol (cache?) ott maradna az adat. Új session-t indítok minden egyes lekérdezésre, flush() és evicat() meg minden van a törlő művelet után, de nem frissül. Az output ablakban látszik hogy a select nem fut le újra, pedig ott van a lekérdezés és debugolva is ellenőriztem végrehajtja a sort, de nincs adatbázis kérés mögötte.
    Ha kilépek és újraindítom a progit akkor már minden rendben látszik.

    Hogy lehet rábírni hogy frissüljön rendben minden? Mi a francért nem frissül?

    Hogyan törölsz?
    Ha simán törlöd a detail entitást, de nem nem frissíted a parent entitás (a másik táblából) Set-jét és nem mergeled (sorry nem vágom pontosan a hibernate-es terminológiát) őt, akkor a hibernate cache úgy érzékelheti, hogy az objektumon nem történt semmi változás (a kapcsolatot csak az egyik oldalról törölted, a parent felől nem), ezért nincs oka újra lekérdezni olyan result setet mégegyszer.

    Próbáld meg, hogy a parent entitás Set-jéből törlöd a detailt, majd mergeled a parent entitást.

    Remélem ez menni fog.

  • MrSealRD
    veterán

    Sziasztok!

    Adott egy Hibernate-et és MySQL-t használó NetBeans alatt készített alkalmazás GUI-val.
    Két táblázat van benne, amiket feltöltök a perzisztens objektumokkal. A második táblázat az első detail táblája, azaz az egyik adattagja (ami Set típusú) tételeit tartalmazza.
    A lényeg az hogy ha törlök valamit a detail táblából akkor látom az SQL parancsot (delete) az output ablakban. Az SQL adatbázist megnézve látszik hogy törlődött a rekord, viszont a vizuális komponensben (jTable) nem látszik a frissítés. Természetesen újra feltöltöm a táblát, de nem frissül. Olyan mintha valahol (cache?) ott maradna az adat. Új session-t indítok minden egyes lekérdezésre, flush() és evicat() meg minden van a törlő művelet után, de nem frissül. Az output ablakban látszik hogy a select nem fut le újra, pedig ott van a lekérdezés és debugolva is ellenőriztem végrehajtja a sort, de nincs adatbázis kérés mögötte.
    Ha kilépek és újraindítom a progit akkor már minden rendben látszik.

    Hogy lehet rábírni hogy frissüljön rendben minden? Mi a francért nem frissül?

    Lehet, hogy nem pont ez kell neked, de amennyire nem látunk a kódból semmit, annyira talán ez is jó lehet: [link]

    Egyébként gondold végig.
    Mi a jTable adatforrása? Elvileg azon objektumok halmaza( valamilyen kollekció) melyeket a hibernate-en keresztül kezelsz és az adatbázis táblák rekordjainak feleltethetőek meg...

    Akkor most jön a kérdés...Pontosan honnan is törölted? (Ha a hibernate és a DB látja...) De a jTable nem...

  • thboxx
    aktív tag

    Tartalmaz egy privát JRE-t, amit csak ő használ, ezt a külső programok nem látják, a társítások sem jönnek létre.
    Ha nem akarja az igazat, akkor töltsd le az offline installert: [link]

    Még mindig nem megy... :O :W Így sem

  • skoda12
    aktív tag

    Sziasztok!

    Adott egy Hibernate-et és MySQL-t használó NetBeans alatt készített alkalmazás GUI-val.
    Két táblázat van benne, amiket feltöltök a perzisztens objektumokkal. A második táblázat az első detail táblája, azaz az egyik adattagja (ami Set típusú) tételeit tartalmazza.
    A lényeg az hogy ha törlök valamit a detail táblából akkor látom az SQL parancsot (delete) az output ablakban. Az SQL adatbázist megnézve látszik hogy törlődött a rekord, viszont a vizuális komponensben (jTable) nem látszik a frissítés. Természetesen újra feltöltöm a táblát, de nem frissül. Olyan mintha valahol (cache?) ott maradna az adat. Új session-t indítok minden egyes lekérdezésre, flush() és evicat() meg minden van a törlő művelet után, de nem frissül. Az output ablakban látszik hogy a select nem fut le újra, pedig ott van a lekérdezés és debugolva is ellenőriztem végrehajtja a sort, de nincs adatbázis kérés mögötte.
    Ha kilépek és újraindítom a progit akkor már minden rendben látszik.

    Hogy lehet rábírni hogy frissüljön rendben minden? Mi a francért nem frissül?

    Kod nelkul nehez megmondani, hogy mi a baj, de nem nyelsz el egy catch agban egy exceptiont, ami nincs kiloggolva?

    "Új session-t indítok minden egyes lekérdezésre"

    Ez anti-pattern. Mivel desktop approl van szo, gondolom csak egy user hasznalja egyszerre. Boven eleg akkor nyitni uj sessiont, ha az elozo inkonzisztens allapotba kerul.

  • bucsupeti
    senior tag

    Sziasztok!

    Adott egy Hibernate-et és MySQL-t használó NetBeans alatt készített alkalmazás GUI-val.
    Két táblázat van benne, amiket feltöltök a perzisztens objektumokkal. A második táblázat az első detail táblája, azaz az egyik adattagja (ami Set típusú) tételeit tartalmazza.
    A lényeg az hogy ha törlök valamit a detail táblából akkor látom az SQL parancsot (delete) az output ablakban. Az SQL adatbázist megnézve látszik hogy törlődött a rekord, viszont a vizuális komponensben (jTable) nem látszik a frissítés. Természetesen újra feltöltöm a táblát, de nem frissül. Olyan mintha valahol (cache?) ott maradna az adat. Új session-t indítok minden egyes lekérdezésre, flush() és evicat() meg minden van a törlő művelet után, de nem frissül. Az output ablakban látszik hogy a select nem fut le újra, pedig ott van a lekérdezés és debugolva is ellenőriztem végrehajtja a sort, de nincs adatbázis kérés mögötte.
    Ha kilépek és újraindítom a progit akkor már minden rendben látszik.

    Hogy lehet rábírni hogy frissüljön rendben minden? Mi a francért nem frissül?

  • modder
    aktív tag

    Definiáld felül a háromszög osztályban az Object ősosztály equals metódusát, és akkor adjon vissza igazat, ha a két háromszög területe megegyezik. Így amikor hozzáadogatod a háromszögeket a HashSet-hez, azok nem kerülnek bele a halmazba, amelyeknek a területe már szerepel.

    Kódban ez vhogy így néz ki (nálam most a háromszög osztályt Triangle-nek hívják):

    @Override
    public boolean equals(Object o) {
    if (o instanceof Triangle) {
    Triangle t = (Triangle) o;
    if (t.getArea() == getArea()) {
    return true;
    }
    }
    return false;
    }

    // A hashCode metódust is illik felüldefiniálni,
    // ha az equals-t felüldefiniálod. Az a lényeg,
    // hogy egyezzen meg annak a két objektumnak a hashkódja,
    // amelyekre az equals igazat ad vissza.
    @Override
    public int hashCode() {
    return (int) getArea(); // ezt lehet máshogy is, de a célnak megfelel
    }

    Én nem keverném ezt bele, mert az equals()-nak és a hashCode()-nak az egyedet kell tudnia azonosítania, és nem egyetlen tulajdonságát. Végtelenféle háromszöget lehet ugyanazzal a területtel. Szóval ez ellent mond a Java equals()-ra és hashCode()-ra vonatkozó contractjának.

    Nem is adna jó eredményt, mert a terület nagy valószínűséggel Float lesz, amit nem tudsz még javában sem alapból úgy összehasonlítani, hogy mindig jó eredményt kapj, pláne nem az == operátorral:
    http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Float.html#equals(java.lang.Object)

    Nem tudom mire kell itt a HashSet, de én úgy oldanám meg a dolgot memóriahatékonyan, hogy:
    1) csinálok egy ArrayList<Haromszog> haromszogek listát
    2) csinálok egy másik ArrayList<Float> teruletek listát
    3) ahogy generálom a háromszögeket a ciklusban, egy belső ciklusban minden legenerált háromszögre végigmegyek a 'területek' összes elemén és megnézem, hogy benne van-e az új háromszög területe, így:
    if(Math.abs( aktualisTerulet - ujHaromszogTerulet) < 0.001f)
    benne van
    else
    nincs benne, hozzáadom a háromszögekhez a háromszöget, és hozzáadom a az ujHaromszogTeruletet a teruletekhez

    Ha pontosabb float egyenlőség vizsgálat kell, ezt találtam neten http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm

    esetleg gyorsabban futó megoldást is találhatsz, ha valamilyen orderes listet használsz pl http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#binarySearch(java.util.List, java.lang.Object, java.util.Comparator) -vel keresel a területek között

  • Superhun
    addikt

    "Congratulations!
    You have the recommended Java installed (Version 7 Update 9). " Ezt kaptam, mikor le akartam tölteni... Amúgy a JDK tartalmazza a JRE-t nem?

    Tartalmaz egy privát JRE-t, amit csak ő használ, ezt a külső programok nem látják, a társítások sem jönnek létre.
    Ha nem akarja az igazat, akkor töltsd le az offline installert: [link]

  • thboxx
    aktív tag

    Szedd le a JRE-t: [link] Ez társítani fogja a jar fájlokat.

    "Congratulations!
    You have the recommended Java installed (Version 7 Update 9). " Ezt kaptam, mikor le akartam tölteni... Amúgy a JDK tartalmazza a JRE-t nem?

  • Superhun
    addikt

    Szia! Most próbáltam... de még a parancssor ablak sem ugrott be így... :(((

    Szedd le a JRE-t: [link] Ez társítani fogja a jar fájlokat.

  • thboxx
    aktív tag

    Próbáltad már úgy, hogy a JRE bin mappájában lévő javaw.exe-vel társítod a jar kiterjesztést? Egyébként ha felraksz egy JRE-t (nem JDK-t), akkor alapból társítania kéne a javaw.exe-vel.

    Szia! Most próbáltam... de még a parancssor ablak sem ugrott be így... :(((

  • Superhun
    addikt

    Hali!

    Nem tudom, jó helyre írok-é' :DDD , de hátha... Szóval van egy .jar kiterjesztésű kis alkalmazásom, amit elvileg katt2x aztán megy, mint egy kis szutyok egy exe-s ősgame... de nálam nem történik semmi. Ill. pillanatra beugrik a parancssor, aztán ahogy jött, úgy el is tűnik... Legújabb JDK van fent a gépen... Már a hajamat tépem tőle... :W Valaki tudna nekem segíteni?

    Üdv.

    Próbáltad már úgy, hogy a JRE bin mappájában lévő javaw.exe-vel társítod a jar kiterjesztést? Egyébként ha felraksz egy JRE-t (nem JDK-t), akkor alapból társítania kéne a javaw.exe-vel.

  • thboxx
    aktív tag

    Szerk.: (lejárt az időm)

    Összefoglalva:
    Ezt add hozzá a PATH változóhoz: ;c:\"Program Files"\Java\jdk1.7.0\bin
    Ha a jdk bin nevű könyvtárának más az elérési útvonala, akkor annak megfelelően változtasd meg.

    (Bocsi az előző hszemet kapkodva állítottam össze :) )

    Nem megy... A PATH változót beállítottam, meg megcsináltam a CLASSPATH változót is a megadott értékekkel... :B

  • kispx
    addikt

    Magyarul le van itt írva. A második bekezdés az érdekes, mivel neked már fent van a jdk.

    "Windows operációs rendszeren parancssorból, vagy .bat állományból:
    SET PATH=%PATH%;c:\Program Files\java\jdk1.5.0\bin ; ."

    Résznél természeten neked más elérési útvonalad lesz a jdk bin mappájához.

    Szerk.: (lejárt az időm)

    Összefoglalva:
    Ezt add hozzá a PATH változóhoz: ;c:\"Program Files"\Java\jdk1.7.0\bin
    Ha a jdk bin nevű könyvtárának más az elérési útvonala, akkor annak megfelelően változtasd meg.

    (Bocsi az előző hszemet kapkodva állítottam össze :) )

  • kispx
    addikt

    Azt megtaláltam, hogy hol és mit kell megváltoztatni... De mire?? :F Őszintén, most kissé lámának érzem magam a géphez... :DDD

    Magyarul le van itt írva. A második bekezdés az érdekes, mivel neked már fent van a jdk.

    "Windows operációs rendszeren parancssorból, vagy .bat állományból:
    SET PATH=%PATH%;c:\Program Files\java\jdk1.5.0\bin ; ."

    Résznél természeten neked más elérési útvonalad lesz a jdk bin mappájához.

  • thboxx
    aktív tag

    parancssorban próbáld meg a program mappájában kiadni:
    java -jar fájlneve.jar

    De előszór a PATH változót állítsd be. (Feltéve ha még a java.exe elérési útvonala nincs benne)

    Azt megtaláltam, hogy hol és mit kell megváltoztatni... De mire?? :F Őszintén, most kissé lámának érzem magam a géphez... :DDD

  • kispx
    addikt

    Hali!

    Nem tudom, jó helyre írok-é' :DDD , de hátha... Szóval van egy .jar kiterjesztésű kis alkalmazásom, amit elvileg katt2x aztán megy, mint egy kis szutyok egy exe-s ősgame... de nálam nem történik semmi. Ill. pillanatra beugrik a parancssor, aztán ahogy jött, úgy el is tűnik... Legújabb JDK van fent a gépen... Már a hajamat tépem tőle... :W Valaki tudna nekem segíteni?

    Üdv.

    parancssorban próbáld meg a program mappájában kiadni:
    java -jar fájlneve.jar

    De előszór a PATH változót állítsd be. (Feltéve ha még a java.exe elérési útvonala nincs benne)

  • thboxx
    aktív tag

    Hali!

    Nem tudom, jó helyre írok-é' :DDD , de hátha... Szóval van egy .jar kiterjesztésű kis alkalmazásom, amit elvileg katt2x aztán megy, mint egy kis szutyok egy exe-s ősgame... de nálam nem történik semmi. Ill. pillanatra beugrik a parancssor, aztán ahogy jött, úgy el is tűnik... Legújabb JDK van fent a gépen... Már a hajamat tépem tőle... :W Valaki tudna nekem segíteni?

    Üdv.

  • Superhun
    addikt

    Helo!

    Nemrég kezdtem javaban programozni és a hashset-el van most problémám...
    Valaki le tudná írni, hogy kell használni?

    Jól tudom azt, hogy ha van mondjuk egy kollekcióm es hashset-be adom meg őket, akkor a hashset kiszűri az azonos elemeket és mindenből csak egyet ad vissza?

    Definiáld felül a háromszög osztályban az Object ősosztály equals metódusát, és akkor adjon vissza igazat, ha a két háromszög területe megegyezik. Így amikor hozzáadogatod a háromszögeket a HashSet-hez, azok nem kerülnek bele a halmazba, amelyeknek a területe már szerepel.

    Kódban ez vhogy így néz ki (nálam most a háromszög osztályt Triangle-nek hívják):

    @Override
    public boolean equals(Object o) {
    if (o instanceof Triangle) {
    Triangle t = (Triangle) o;
    if (t.getArea() == getArea()) {
    return true;
    }
    }
    return false;
    }

    // A hashCode metódust is illik felüldefiniálni,
    // ha az equals-t felüldefiniálod. Az a lényeg,
    // hogy egyezzen meg annak a két objektumnak a hashkódja,
    // amelyekre az equals igazat ad vissza.
    @Override
    public int hashCode() {
    return (int) getArea(); // ezt lehet máshogy is, de a célnak megfelel
    }

  • Ha a "hashset-be adom meg" alatt azt érted, hogy létrehozol egy HashSetet, konstruktorban átadva a már meglévő kollekciódat; a "mindenből csak egyet ad vissza" alatt meg iterációt (foreach vagy manuális iteráció, mindegy) akkor igaz.

    Azzal a kitétellel, hogy az elemek sorrendje összezilálódhat, mert semmi garancia nincs. Ha azt akarod, hogy a sorrend is megmaradjon, LinkedHashSetet használj.

    Köszi mindkettőtöknek, nézem az új infókkal...

    Am a sorrend lényegtelen, mert generáltam 15 db abc oldalú háromszöget, mindegyiknek külön külön véletlen az oldalhossza és heron képlet alapján kiszámolom a területüket, ez meg is van, már csak annyi van hátra, hogy összehasonlítom a generált háromszögek területét, hogy ne legyen 2 egyforma.

  • Lacces
    őstag

    Helo!

    Nemrég kezdtem javaban programozni és a hashset-el van most problémám...
    Valaki le tudná írni, hogy kell használni?

    Jól tudom azt, hogy ha van mondjuk egy kollekcióm es hashset-be adom meg őket, akkor a hashset kiszűri az azonos elemeket és mindenből csak egyet ad vissza?

    Én úgy tudom, hogy alapból csak egyet is rak bele. És ezért lassú az elem beillesztése, de gyors az elem visszaadása. De mindig van tőlem okosabb a fórumban, érdemes rájuk várni :)

    Amúgy itt találsz példákat a hashset műveletekhez, ha lejebb mész, akkor látsz még további témákat, remove, add, select stb.

    Van a
    Set h = new HashSet();
    HashSet<Integer> h = new HashSet()
    típusú is :)

  • Karma
    félisten

    Helo!

    Nemrég kezdtem javaban programozni és a hashset-el van most problémám...
    Valaki le tudná írni, hogy kell használni?

    Jól tudom azt, hogy ha van mondjuk egy kollekcióm es hashset-be adom meg őket, akkor a hashset kiszűri az azonos elemeket és mindenből csak egyet ad vissza?

    Ha a "hashset-be adom meg" alatt azt érted, hogy létrehozol egy HashSetet, konstruktorban átadva a már meglévő kollekciódat; a "mindenből csak egyet ad vissza" alatt meg iterációt (foreach vagy manuális iteráció, mindegy) akkor igaz.

    Azzal a kitétellel, hogy az elemek sorrendje összezilálódhat, mert semmi garancia nincs. Ha azt akarod, hogy a sorrend is megmaradjon, LinkedHashSetet használj.

  • Helo!

    Nemrég kezdtem javaban programozni és a hashset-el van most problémám...
    Valaki le tudná írni, hogy kell használni?

    Jól tudom azt, hogy ha van mondjuk egy kollekcióm es hashset-be adom meg őket, akkor a hashset kiszűri az azonos elemeket és mindenből csak egyet ad vissza?

  • Superhun
    addikt

    Sziasztok!

    Segítsetek nekem légyszi. Nem bírom beállítani XP Pro-n a CLASSPATH értéket.
    Hogy SciTE-vel tudjak fordítani.
    Netbeans-t is használok, de a SciTE is megy mellett párhuzamosan.

    Egyáltalán mit kell oda beállítani, milyen értéket a JAVA könyvtár bin könyvtárát?
    Próbáltam már mindent, amit a google-val lehet keresni, de nem működik... :(
    Tesztre a CMD-ben a javac-ot írom be. CMD-ben a Java parancs az rendben lefut 1 oldalnyi szöveggel.

    Köszi,

    A path környezeti változóba vedd fel a JDK telepítési mappájában található bin mappát (nálam: c:\Program Files\Java\jdk1.7.0_09\bin). Onnantól kezdve bárhonnan működni fog a javac.

  • _kovi_
    aktív tag

    Sziasztok!

    Segítsetek nekem légyszi. Nem bírom beállítani XP Pro-n a CLASSPATH értéket.
    Hogy SciTE-vel tudjak fordítani.
    Netbeans-t is használok, de a SciTE is megy mellett párhuzamosan.

    Egyáltalán mit kell oda beállítani, milyen értéket a JAVA könyvtár bin könyvtárát?
    Próbáltam már mindent, amit a google-val lehet keresni, de nem működik... :(
    Tesztre a CMD-ben a javac-ot írom be. CMD-ben a Java parancs az rendben lefut 1 oldalnyi szöveggel.

    Köszi,

  • Nyle
    csendes tag

    A legegyszerűbb akkor, ha meg is mutatom, amit leírtam.

    public class Credits {
    public static void main(String[] args) {
    // a film adatainak beállítása
    String title = "The Piano";
    int year = 1993;
    String director = "Jane Campion";
    String role1 = "Ada";
    String actor1 = "Holly Hunter";
    String role2 = "Baines";
    String actor2 = "Harvey Keitel";
    String role3 = "Stewart";
    String actor3 = "Sam Neill";
    String role4 = "Flora";
    String actor4 = "Anna Paquin";

    // az adatok megjelenítése
    System.out.println(title + " (" + year + ")\n" + "A "
    + director.toUpperCase() + " film.\n\n" +
    role1 + "\t" + actor1.toUpperCase() + "\n" +
    role2 + "\t" + actor2.toUpperCase() + "\n" +
    role3 + "\t" + actor3.toUpperCase() + "\n" +
    role4 + "\t" + actor4.toUpperCase());
    }
    }

    Mondjuk azért vicces, hogy a könyv amiből tanulom nem írta le a println fajta megoldást.

  • Nyle
    csendes tag

    A legegyszerűbb akkor, ha meg is mutatom, amit leírtam.

    public class Credits {
    public static void main(String[] args) {
    // a film adatainak beállítása
    String title = "The Piano";
    int year = 1993;
    String director = "Jane Campion";
    String role1 = "Ada";
    String actor1 = "Holly Hunter";
    String role2 = "Baines";
    String actor2 = "Harvey Keitel";
    String role3 = "Stewart";
    String actor3 = "Sam Neill";
    String role4 = "Flora";
    String actor4 = "Anna Paquin";

    // az adatok megjelenítése
    System.out.println(title + " (" + year + ")\n" + "A "
    + director.toUpperCase() + " film.\n\n" +
    role1 + "\t" + actor1.toUpperCase() + "\n" +
    role2 + "\t" + actor2.toUpperCase() + "\n" +
    role3 + "\t" + actor3.toUpperCase() + "\n" +
    role4 + "\t" + actor4.toUpperCase());
    }
    }

    Értem :C :))
    Így már más, nagyon szépen köszönöm!!! sokkal rövidebb, erre gondoltam.

  • D4nte
    csendes tag

    Értem, de nem teljesen jó (biztos béna vagyok még)

    String change = actor1.toUpperCase();
    String change = actor2.toUpperCase();

    Az első még jó, de a másodiknál már nem fogadja el

    change is already defined in main(java.lang.String[])
    String change = actor2.toUpperCase();

    change után definiálni kell, a változtatandót ?
    vagy teljesen rosszul értelmeztem ?

    A legegyszerűbb akkor, ha meg is mutatom, amit leírtam.

    public class Credits {
    public static void main(String[] args) {
    // a film adatainak beállítása
    String title = "The Piano";
    int year = 1993;
    String director = "Jane Campion";
    String role1 = "Ada";
    String actor1 = "Holly Hunter";
    String role2 = "Baines";
    String actor2 = "Harvey Keitel";
    String role3 = "Stewart";
    String actor3 = "Sam Neill";
    String role4 = "Flora";
    String actor4 = "Anna Paquin";

    // az adatok megjelenítése
    System.out.println(title + " (" + year + ")\n" + "A "
    + director.toUpperCase() + " film.\n\n" +
    role1 + "\t" + actor1.toUpperCase() + "\n" +
    role2 + "\t" + actor2.toUpperCase() + "\n" +
    role3 + "\t" + actor3.toUpperCase() + "\n" +
    role4 + "\t" + actor4.toUpperCase());
    }
    }

  • Nyle
    csendes tag

    A change* változókba nem szükséges külön eltárolnod a nagybetűsített dolgokat, annyi, hogy a printedben hívod meg ugyan új a függvényt az eredetiekre, amennyiben a kiíratáson kívül másra nem akarod használni ezeket a nagybetűsített verziókat. Ettől még az eredeti stringek (az előző hozzászólásokból is kiderülten) változatlanok maradnak.

    Értem, de nem teljesen jó (biztos béna vagyok még)

    String change = actor1.toUpperCase();
    String change = actor2.toUpperCase();

    Az első még jó, de a másodiknál már nem fogadja el

    change is already defined in main(java.lang.String[])
    String change = actor2.toUpperCase();

    change után definiálni kell, a változtatandót ?
    vagy teljesen rosszul értelmeztem ?

  • Superhun
    addikt

    "
    "a String az egy olyan állandó, amelynek értéke futás közben megváltozhatatlan"

    Valójában csak a mérete, a karaktereket módosíthatjuk benne a charAt metódussal, O(1) időben."

    A String immutable, nem modosithatod, a charAt pedig pont visszaad egy karaktert es nem modositja azt.

    "Valójában úgy áll a dolog, hogy a kódban definiált Stringek (String str = "abc") az úgynevezett literal pool-ban lévő elemekre fognak hivatkozni, ami a heap-től független, így a GC-től is."

    Java 7-tol az interned stringek is atkerultek a permanent generationbol a young es old generationbe tehat nem igaz, hogy a heaptol fuggetlenek.

    Ok, nézd el nekem, C++-ban is programozok :B

    A második dologról még nem tudtam, köszi a pontosítást. :R

  • D4nte
    csendes tag

    Na szóval akkor újra!

    public class Credits {
    public static void main(String[] args) {
    // a film adatainak beállítása
    String title = "The Piano";
    int year = 1993;
    String director = "Jane Campion";
    String role1 = "Ada";
    String actor1 = "Holly Hunter";
    String role2 = "Baines";
    String actor2 = "Harvey Keitel";
    String role3 = "Stewart";
    String actor3 = "Sam Neill";
    String role4 = "Flora";
    String actor4 = "Anna Paquin";
    // az adatok megjelenítése
    System.out.println(title + " (" + year +")\n" +
    "A " + director + " film.\n\n" +
    role1 + "\t" + actor1 + "\n" +
    role2 + "\t" + actor2 + "\n" +
    role3 + "\t" + actor3 + "\n" +
    role4 + "\t" + actor4 );

    }
    }

    Ez az eredeti kód.
    Mikor futtatom akkor megjeleníti a szövegeket. (tudom, hogy tudjátok :D csak magam miatt írom le)
    Pl: Ada Holly Hunter
    Baines Harvey Keitel
    stb
    És az volna a kérdésem, hogyan lehet a legkönnyebben úgy megváltoztatni a kódot, hogy csak az actorok és a director legyen Teljesen nagybetűvel a többi marad az eredetiben.

    String change = director.toUpperCase();
    Ugye ez megváltoztatja a directorhoz rendelt Jane Campion nevet JANE CAMPION-ra
    + "\n" + change
    Ez pedig megjeleníti.

    Na már most azóta én már átírtam a kódot, így fest most.
    public class Credits {
    public static void main(String[] args) {
    // a film adatainak beállítása
    String title = "The Piano";
    int year = 1993;
    String director = "Jane Campion";
    String role1 = "Ada";
    String actor1 = "Holly Hunter";
    String role2 = "Baines";
    String actor2 = "Harvey Keitel";
    String role3 = "Stewart";
    String actor3 = "Sam Neill";
    String role4 = "Flora";
    String actor4 = "Anna Paquin";
    // az adatok egy részének, nagy betűvel való megjelenítése
    String changedirector = director.toUpperCase();
    String changeactor1 = actor1.toUpperCase();
    String changeactor2 = actor2.toUpperCase();
    String changeactor3 = actor3.toUpperCase();
    String changeactor4 = actor4.toUpperCase();
    // az adatok megjelenítése
    System.out.println(title + " (" + year +")\n" +
    "A " + changedirector + " film.\n\n" +
    role1 + "\t" + changeactor1 + "\n" +
    role2 + "\t" + changeactor2 + "\n" +
    role3 + "\t" + changeactor3 + "\n" +
    role4 + "\t" + changeactor4);
    }
    }

    A kérdés még mindig az, hogy van-e rövidebb megoldás erre ? vagy ez így jó ?
    Elnézést, hogy ilyen hosszúra sikeredet.

    Köszönöm a segítségetek.

    A change* változókba nem szükséges külön eltárolnod a nagybetűsített dolgokat, annyi, hogy a printedben hívod meg ugyan új a függvényt az eredetiekre, amennyiben a kiíratáson kívül másra nem akarod használni ezeket a nagybetűsített verziókat. Ettől még az eredeti stringek (az előző hozzászólásokból is kiderülten) változatlanok maradnak.

  • Nyle
    csendes tag

    Na szóval akkor újra!

    public class Credits {
    public static void main(String[] args) {
    // a film adatainak beállítása
    String title = "The Piano";
    int year = 1993;
    String director = "Jane Campion";
    String role1 = "Ada";
    String actor1 = "Holly Hunter";
    String role2 = "Baines";
    String actor2 = "Harvey Keitel";
    String role3 = "Stewart";
    String actor3 = "Sam Neill";
    String role4 = "Flora";
    String actor4 = "Anna Paquin";
    // az adatok megjelenítése
    System.out.println(title + " (" + year +")\n" +
    "A " + director + " film.\n\n" +
    role1 + "\t" + actor1 + "\n" +
    role2 + "\t" + actor2 + "\n" +
    role3 + "\t" + actor3 + "\n" +
    role4 + "\t" + actor4 );

    }
    }

    Ez az eredeti kód.
    Mikor futtatom akkor megjeleníti a szövegeket. (tudom, hogy tudjátok :D csak magam miatt írom le)
    Pl: Ada Holly Hunter
    Baines Harvey Keitel
    stb
    És az volna a kérdésem, hogyan lehet a legkönnyebben úgy megváltoztatni a kódot, hogy csak az actorok és a director legyen Teljesen nagybetűvel a többi marad az eredetiben.

    String change = director.toUpperCase();
    Ugye ez megváltoztatja a directorhoz rendelt Jane Campion nevet JANE CAMPION-ra
    + "\n" + change
    Ez pedig megjeleníti.

    Na már most azóta én már átírtam a kódot, így fest most.
    public class Credits {
    public static void main(String[] args) {
    // a film adatainak beállítása
    String title = "The Piano";
    int year = 1993;
    String director = "Jane Campion";
    String role1 = "Ada";
    String actor1 = "Holly Hunter";
    String role2 = "Baines";
    String actor2 = "Harvey Keitel";
    String role3 = "Stewart";
    String actor3 = "Sam Neill";
    String role4 = "Flora";
    String actor4 = "Anna Paquin";
    // az adatok egy részének, nagy betűvel való megjelenítése
    String changedirector = director.toUpperCase();
    String changeactor1 = actor1.toUpperCase();
    String changeactor2 = actor2.toUpperCase();
    String changeactor3 = actor3.toUpperCase();
    String changeactor4 = actor4.toUpperCase();
    // az adatok megjelenítése
    System.out.println(title + " (" + year +")\n" +
    "A " + changedirector + " film.\n\n" +
    role1 + "\t" + changeactor1 + "\n" +
    role2 + "\t" + changeactor2 + "\n" +
    role3 + "\t" + changeactor3 + "\n" +
    role4 + "\t" + changeactor4);
    }
    }

    A kérdés még mindig az, hogy van-e rövidebb megoldás erre ? vagy ez így jó ?
    Elnézést, hogy ilyen hosszúra sikeredet.

    Köszönöm a segítségetek.

  • skoda12
    aktív tag

    "a String az egy olyan állandó, amelynek értéke futás közben megváltozhatatlan"

    Valójában csak a mérete, a karaktereket módosíthatjuk benne a charAt metódussal, O(1) időben. ;)

    "a Szemétgyűjtő a Stringeket nem kezeli, nem dobja ki őket"

    Ezt nem gondolhatod komolyan. Elég sok alkalmazás kapna így out of memory-t :D. Valójában úgy áll a dolog, hogy a kódban definiált Stringek (String str = "abc") az úgynevezett literal pool-ban lévő elemekre fognak hivatkozni, ami a heap-től független, így a GC-től is. A futás időben keletkezett String objektumok viszont mindig a heap-re kerülnek, amiket pedig a GC eltakarít, ha már nincs rájuk hivatkozás.

    Példa:

    String str1 = "abc";
    String str2 = "abc";
    System.out.println(str1 == str2);

    Eredmény: true

    String str1 = new String("abc");
    String str2 = new String("abc");
    System.out.println(str1 == str2);

    Eredmény: false

    "
    "a String az egy olyan állandó, amelynek értéke futás közben megváltozhatatlan"

    Valójában csak a mérete, a karaktereket módosíthatjuk benne a charAt metódussal, O(1) időben."

    A String immutable, nem modosithatod, a charAt pedig pont visszaad egy karaktert es nem modositja azt.

    "Valójában úgy áll a dolog, hogy a kódban definiált Stringek (String str = "abc") az úgynevezett literal pool-ban lévő elemekre fognak hivatkozni, ami a heap-től független, így a GC-től is."

    Java 7-tol az interned stringek is atkerultek a permanent generationbol a young es old generationbe tehat nem igaz, hogy a heaptol fuggetlenek.

  • Lacces
    őstag

    Módosítani lehet, de hozzáadni új karaktert is? Úgy hogy ugyanaz az objektum.

    Igen, de te nem ezt mondtad :P. Mindegy, lényeg hogy értjük egymást. ;)

    igazad van, inkább visszafekszem :DDD

  • Superhun
    addikt

    Módosítani lehet, de hozzáadni új karaktert is? Úgy hogy ugyanaz az objektum.

    Na igen, az első variáció, azt tudtam... az a literal pool. Erről olvastam is.

    A második jah, abban igazad van, azt most megnéztem anno kódot, és rosszul következtettem rá, mert ott nekem str1.equals(str2) van..., Igen, és az objektum a kupac memória kerül, ahol a gc garázdálkodik és csak a lokális változók és a tagfüggvények kerülnek a verembe.

    Igaz, félre beszéltem, köszönöm a helyesbítést :)

    Módosítani lehet, de hozzáadni új karaktert is? Úgy hogy ugyanaz az objektum.

    Igen, de te nem ezt mondtad :P. Mindegy, lényeg hogy értjük egymást. ;)

  • Lacces
    őstag

    "a String az egy olyan állandó, amelynek értéke futás közben megváltozhatatlan"

    Valójában csak a mérete, a karaktereket módosíthatjuk benne a charAt metódussal, O(1) időben. ;)

    "a Szemétgyűjtő a Stringeket nem kezeli, nem dobja ki őket"

    Ezt nem gondolhatod komolyan. Elég sok alkalmazás kapna így out of memory-t :D. Valójában úgy áll a dolog, hogy a kódban definiált Stringek (String str = "abc") az úgynevezett literal pool-ban lévő elemekre fognak hivatkozni, ami a heap-től független, így a GC-től is. A futás időben keletkezett String objektumok viszont mindig a heap-re kerülnek, amiket pedig a GC eltakarít, ha már nincs rájuk hivatkozás.

    Példa:

    String str1 = "abc";
    String str2 = "abc";
    System.out.println(str1 == str2);

    Eredmény: true

    String str1 = new String("abc");
    String str2 = new String("abc");
    System.out.println(str1 == str2);

    Eredmény: false

    Módosítani lehet, de hozzáadni új karaktert is? Úgy hogy ugyanaz az objektum.

    Na igen, az első variáció, azt tudtam... az a literal pool. Erről olvastam is.

    A második jah, abban igazad van, azt most megnéztem anno kódot, és rosszul következtettem rá, mert ott nekem str1.equals(str2) van..., Igen, és az objektum a kupac memória kerül, ahol a gc garázdálkodik és csak a lokális változók és a tagfüggvények kerülnek a verembe.

    Igaz, félre beszéltem, köszönöm a helyesbítést :)

  • Superhun
    addikt

    Nekem sem tiszta, mit akarsz pontosan, de lehet én vagyok lüke hozzá.

    Ez lehet az amire gondoltál szerintem:
    String result = title + " (" + year +")\n" +
    "A " + director + " film.\n\n" +
    (role1 + "\t" + actor1 + "\n" +
    role2 + "\t" + actor2 + "\n" +
    role3 + "\t" + actor3 + "\n" +
    role4 + "\t" + actor4 + "\n" +
    change).toUpperCase();


    System.out.println(result);

    role1-től a change-ig minden nagybetűs a többit meg kicsiben hagyja a result Stringben.
    A toUpperCase() után oda lehet szúrni a toStrin()-et is de ez nem kötelező, anélkül is nagybetűsre alakítja.

    Karma hsz-e is hasznos. De szerintem még nem tartasz ott, hogy tud, ő miért javasolta a StringBuildert :) Bár az is, igaz, hogy inkább forciklusban használják a StringBuildert.

    Ennek oka röviden, hogy a String az egy olyan állandó, amelynek értéke futás közben megváltozhatatlan. Ha úgy mond konketenálsz egy String-et akkor új String jön létre.
    role1 + "t" -> akkor ez egy új String objektum ami a memóriában van, és nem a régi módoítottad, ami szintén a memóriában van, és marad a program végéig! StringBuilder esetében pedig a régit tudod módosítani, és így csak String objektum van a memóriában. A JVM nem módosítja sosem a Stringeket, hanem újat hozz létre mindig! És ezzel eszi a memóriát. És ez azért is baj, mert a Szemétgyűjtő a Stringeket nem kezeli, nem dobja ki őket.
    Bár van egy előnye ennek, az ha mégegyszer egy ugyanolyan String objektum jön létre (ugyanaz az értéke), akkor a JVM nem hozz létre új Strng-et hanem egész egyszerűen már egy meglévőre hivatkozik.
    De ha tévedet, jönnek a többiek és nagy örömmel kijavítanak. :DDD

    "a String az egy olyan állandó, amelynek értéke futás közben megváltozhatatlan"

    Valójában csak a mérete, a karaktereket módosíthatjuk benne a charAt metódussal, O(1) időben. ;)

    "a Szemétgyűjtő a Stringeket nem kezeli, nem dobja ki őket"

    Ezt nem gondolhatod komolyan. Elég sok alkalmazás kapna így out of memory-t :D. Valójában úgy áll a dolog, hogy a kódban definiált Stringek (String str = "abc") az úgynevezett literal pool-ban lévő elemekre fognak hivatkozni, ami a heap-től független, így a GC-től is. A futás időben keletkezett String objektumok viszont mindig a heap-re kerülnek, amiket pedig a GC eltakarít, ha már nincs rájuk hivatkozás.

    Példa:

    String str1 = "abc";
    String str2 = "abc";
    System.out.println(str1 == str2);

    Eredmény: true

    String str1 = new String("abc");
    String str2 = new String("abc");
    System.out.println(str1 == str2);

    Eredmény: false

  • Lacces
    őstag

    Újabb kérdés! (elnézést a sok kérdés miatt)

    Adott az alábbi kód

    public class Credits {
    public static void main(String[] args) {
    // a film adatainak beállítása
    String title = "The Piano";
    int year = 1993;
    String director = "Jane Campion";
    String role1 = "Ada";
    String actor1 = "Holly Hunter";
    String role2 = "Baines";
    String actor2 = "Harvey Keitel";
    String role3 = "Stewart";
    String actor3 = "Sam Neill";
    String role4 = "Flora";
    String actor4 = "Anna Paquin";
    String change = director.toUpperCase();
    // az adatok megjelenítése
    System.out.println(title + " (" + year +")\n" +
    "A " + director + " film.\n\n" +
    role1 + "\t" + actor1 + "\n" +
    role2 + "\t" + actor2 + "\n" +
    role3 + "\t" + actor3 + "\n" +
    role4 + "\t" + actor4 + "\n" +
    change);
    }
    }

    A kiemelt részek felelősek a director nagybetűvel való megjelenítésért, az kérdésem is ehhez kapcsolódó lenne. Lehetséges úgy átírni a kódot hogy az actorokat és a rolekat egy Stringben alakítsa át nagybetűsre ?
    a megjelenítés már nem lényeges.

    Előre is köszönöm.

    update: Nem lehet kódban kiemelni vagy csak nekem nem akarja az igazságot.
    String change = director.toUpperCase();
    ez lenne a lényeges rész.

    Nekem sem tiszta, mit akarsz pontosan, de lehet én vagyok lüke hozzá.

    Ez lehet az amire gondoltál szerintem:
    String result = title + " (" + year +")\n" +
    "A " + director + " film.\n\n" +
    (role1 + "\t" + actor1 + "\n" +
    role2 + "\t" + actor2 + "\n" +
    role3 + "\t" + actor3 + "\n" +
    role4 + "\t" + actor4 + "\n" +
    change).toUpperCase();


    System.out.println(result);

    role1-től a change-ig minden nagybetűs a többit meg kicsiben hagyja a result Stringben.
    A toUpperCase() után oda lehet szúrni a toStrin()-et is de ez nem kötelező, anélkül is nagybetűsre alakítja.

    Karma hsz-e is hasznos. De szerintem még nem tartasz ott, hogy tud, ő miért javasolta a StringBuildert :) Bár az is, igaz, hogy inkább forciklusban használják a StringBuildert.

    Ennek oka röviden, hogy a String az egy olyan állandó, amelynek értéke futás közben megváltozhatatlan. Ha úgy mond konketenálsz egy String-et akkor új String jön létre.
    role1 + "t" -> akkor ez egy új String objektum ami a memóriában van, és nem a régi módoítottad, ami szintén a memóriában van, és marad a program végéig! StringBuilder esetében pedig a régit tudod módosítani, és így csak String objektum van a memóriában. A JVM nem módosítja sosem a Stringeket, hanem újat hozz létre mindig! És ezzel eszi a memóriát. És ez azért is baj, mert a Szemétgyűjtő a Stringeket nem kezeli, nem dobja ki őket.
    Bár van egy előnye ennek, az ha mégegyszer egy ugyanolyan String objektum jön létre (ugyanaz az értéke), akkor a JVM nem hozz létre új Strng-et hanem egész egyszerűen már egy meglévőre hivatkozik.
    De ha tévedet, jönnek a többiek és nagy örömmel kijavítanak. :DDD

  • Karma
    félisten

    StringBuilder használata csak akkor szükséges, ha pl. ciklusban konkatenálsz egy már meglévő Stringhez. Egyébként ha már 3 Stringet konkatenálsz, optimalizál a Java és StringBuildert visz a bájtkódba.

    Oké, rémlett valami ilyesmi. Talán ez egy olyan berögződés, ami nem káros :)

  • Superhun
    addikt

    Hogy mit szeretnél? Fontos lépés a programozásban, hogy pontosan tudod mit és miért akarsz csinálni. A zajt kordában kell tartani.

    Jelen példa esetén nekem nem jött át a szándék. Kifejthetnéd.
    Mindenesetre ha egy nagy stringben akarsz mindent összegyűjteni, akkor nincs más dolgod, mint összefűzöd őket. A rossz megoldás a + operátor, a kicsit jobb a StringBuffer/StringBuildet használata, nekem személy szerint az Apache Commons Lang nevű library StringUtils.join() metódusa tetszik a legjobban - nem vagyok a kerék újrafeltalálásának híve.

    Persze a gyakorlás az más tészta. De akkor is legyen legalább minimális értelme.

    StringBuilder használata csak akkor szükséges, ha pl. ciklusban konkatenálsz egy már meglévő Stringhez. Egyébként ha már 3 Stringet konkatenálsz, optimalizál a Java és StringBuildert visz a bájtkódba.

  • Karma
    félisten

    Újabb kérdés! (elnézést a sok kérdés miatt)

    Adott az alábbi kód

    public class Credits {
    public static void main(String[] args) {
    // a film adatainak beállítása
    String title = "The Piano";
    int year = 1993;
    String director = "Jane Campion";
    String role1 = "Ada";
    String actor1 = "Holly Hunter";
    String role2 = "Baines";
    String actor2 = "Harvey Keitel";
    String role3 = "Stewart";
    String actor3 = "Sam Neill";
    String role4 = "Flora";
    String actor4 = "Anna Paquin";
    String change = director.toUpperCase();
    // az adatok megjelenítése
    System.out.println(title + " (" + year +")\n" +
    "A " + director + " film.\n\n" +
    role1 + "\t" + actor1 + "\n" +
    role2 + "\t" + actor2 + "\n" +
    role3 + "\t" + actor3 + "\n" +
    role4 + "\t" + actor4 + "\n" +
    change);
    }
    }

    A kiemelt részek felelősek a director nagybetűvel való megjelenítésért, az kérdésem is ehhez kapcsolódó lenne. Lehetséges úgy átírni a kódot hogy az actorokat és a rolekat egy Stringben alakítsa át nagybetűsre ?
    a megjelenítés már nem lényeges.

    Előre is köszönöm.

    update: Nem lehet kódban kiemelni vagy csak nekem nem akarja az igazságot.
    String change = director.toUpperCase();
    ez lenne a lényeges rész.

    Hogy mit szeretnél? Fontos lépés a programozásban, hogy pontosan tudod mit és miért akarsz csinálni. A zajt kordában kell tartani.

    Jelen példa esetén nekem nem jött át a szándék. Kifejthetnéd.
    Mindenesetre ha egy nagy stringben akarsz mindent összegyűjteni, akkor nincs más dolgod, mint összefűzöd őket. A rossz megoldás a + operátor, a kicsit jobb a StringBuffer/StringBuildet használata, nekem személy szerint az Apache Commons Lang nevű library StringUtils.join() metódusa tetszik a legjobban - nem vagyok a kerék újrafeltalálásának híve.

    Persze a gyakorlás az más tészta. De akkor is legyen legalább minimális értelme.

  • Nyle
    csendes tag

    Újabb kérdés! (elnézést a sok kérdés miatt)

    Adott az alábbi kód

    public class Credits {
    public static void main(String[] args) {
    // a film adatainak beállítása
    String title = "The Piano";
    int year = 1993;
    String director = "Jane Campion";
    String role1 = "Ada";
    String actor1 = "Holly Hunter";
    String role2 = "Baines";
    String actor2 = "Harvey Keitel";
    String role3 = "Stewart";
    String actor3 = "Sam Neill";
    String role4 = "Flora";
    String actor4 = "Anna Paquin";
    String change = director.toUpperCase();
    // az adatok megjelenítése
    System.out.println(title + " (" + year +")\n" +
    "A " + director + " film.\n\n" +
    role1 + "\t" + actor1 + "\n" +
    role2 + "\t" + actor2 + "\n" +
    role3 + "\t" + actor3 + "\n" +
    role4 + "\t" + actor4 + "\n" +
    change);
    }
    }

    A kiemelt részek felelősek a director nagybetűvel való megjelenítésért, az kérdésem is ehhez kapcsolódó lenne. Lehetséges úgy átírni a kódot hogy az actorokat és a rolekat egy Stringben alakítsa át nagybetűsre ?
    a megjelenítés már nem lényeges.

    Előre is köszönöm.

    update: Nem lehet kódban kiemelni vagy csak nekem nem akarja az igazságot.
    String change = director.toUpperCase();
    ez lenne a lényeges rész.

  • Karma
    félisten

    Köszi a linket, de itt már kerestem és nem találtam :S biztos nem vettem észre.

    A commented második részét kifejtenéd bővebben ? akár pm-ben is jöhet ha nem szeretnél offolni.
    Minden érdekel :)

    Ott van az pedig, a pow metódus az konkrétan.

  • Nyle
    csendes tag

    Ez a számítás teljesen jó ebben a formában szerintem.

    A Math osztályban találsz tetszőleges hatványra emelő metódust, de a négyzet pont olyan, hogy ezért felesleges ezt bevonni.

    ---

    Az alaphelyzetre visszatérve nem vagyok annyira meggyőződve arról, hogy jól választottál nyelvet. Amit most írsz stílus, ami egyszer strukturált programozásig fejlődhet, szerintem nem igényli a Javát; viszont rossz Java programozási gyakorlatot ültethet el a fejedben, amit nehéz lesz kiirtani.

    Köszi a linket, de itt már kerestem és nem találtam :S biztos nem vettem észre.

    A commented második részét kifejtenéd bővebben ? akár pm-ben is jöhet ha nem szeretnél offolni.
    Minden érdekel :)

  • Karma
    félisten

    Köszi!

    Valahogy sejtettem, hogy csak így lehet.
    weight = 0.45 * 3; ez a rész elég is volt :)
    A tizedes vesszőt csak megszokásból írtam így, de már kezdem megszokni a dolgokat.

    Viszont lenne egy újabb kérdésem
    Elöljáróban még annyit leszögeznék, hogy soha nem programoztam és nem is tanultam programozást.
    De nagyon érdekel és tetszik is. Ezután a java mellett döntöttem.

    Szóval adott az alább kód
    public class Matek {
    public static void main(String[] args) {
    int x = 5;
    int y = 6;
    System.out.println("Matek 5 to the second plus 6 to the second equal");
    int number = (x * x) + (y * y);
    System.out.println("Matek " + number);

    }
    }

    A feladat az lenne, hogy 2 szám négyzetét kiszámolja majd összeadja és azt megjeleníti.
    Le is fut és jól is működik. Nem is hibával kapcsolatos a kérdésem, inkább azt szeretném tudni, hogy van e más megoldás 2 szám négyzetének kiszámolására ? keresgettem googleban, de nem találtam olyat ami nekem jó lenne. vagy csak még nagyon kezdő vagyok :)
    Lehet nektek csúnya a fenti kód, de tőlem most csak ennyire futotta!
    Várom a véleményeket.

    Előre is köszönöm.

    Ez a számítás teljesen jó ebben a formában szerintem.

    A Math osztályban találsz tetszőleges hatványra emelő metódust, de a négyzet pont olyan, hogy ezért felesleges ezt bevonni.

    ---

    Az alaphelyzetre visszatérve nem vagyok annyira meggyőződve arról, hogy jól választottál nyelvet. Amit most írsz stílus, ami egyszer strukturált programozásig fejlődhet, szerintem nem igényli a Javát; viszont rossz Java programozási gyakorlatot ültethet el a fejedben, amit nehéz lesz kiirtani.

  • Nyle
    csendes tag

    Két alapvető dolgot tegyünk tisztába:

    1. A tizedesvesszőt ponttal jelölik szinte minden prognyelvben :)
    2. Int típusú változnak nem adhatsz értékül lebegőpontos számot. Tehát vagy lebegőpontosként definiálod a weight változót,

    // lebegőpontos, a szám végén egy f betűvel jelöljük
    float weight = 250.0f;
    weight += 0.45f * 3;

    // dupla pontosságú lebegőpontos
    double weight = 250.0;
    weight += 0.45 * 3;

    vagy castolod a jobboldalt egész számmá:

    weight += (int)(0.45f * 3);

    Az utóbbinál figyelni kell, mert pontosságot veszíthetsz.

    Sok sikert a tanuláshoz! ;)

    Köszi!

    Valahogy sejtettem, hogy csak így lehet.
    weight = 0.45 * 3; ez a rész elég is volt :)
    A tizedes vesszőt csak megszokásból írtam így, de már kezdem megszokni a dolgokat.

    Viszont lenne egy újabb kérdésem
    Elöljáróban még annyit leszögeznék, hogy soha nem programoztam és nem is tanultam programozást.
    De nagyon érdekel és tetszik is. Ezután a java mellett döntöttem.

    Szóval adott az alább kód
    public class Matek {
    public static void main(String[] args) {
    int x = 5;
    int y = 6;
    System.out.println("Matek 5 to the second plus 6 to the second equal");
    int number = (x * x) + (y * y);
    System.out.println("Matek " + number);

    }
    }

    A feladat az lenne, hogy 2 szám négyzetét kiszámolja majd összeadja és azt megjeleníti.
    Le is fut és jól is működik. Nem is hibával kapcsolatos a kérdésem, inkább azt szeretném tudni, hogy van e más megoldás 2 szám négyzetének kiszámolására ? keresgettem googleban, de nem találtam olyat ami nekem jó lenne. vagy csak még nagyon kezdő vagyok :)
    Lehet nektek csúnya a fenti kód, de tőlem most csak ennyire futotta!
    Várom a véleményeket.

    Előre is köszönöm.

  • Superhun
    addikt

    Áh, mea maxima culpa.

    Most buktam egy interjúkérdést valószínűleg, abban a tévhitben éltem, hogy nem error a pontosságvesztés. Kipróbáltam, és tényleg fordítási hiba a vége.

    Sajna az értékadó operátor ennyivel butább, a += -nél le van kezelve ez az eset.

  • Karma
    félisten

    += operátor használatával valóban nem kell, bocsi :B Csak fejben még leragadtam az ő megoldásánál, ott viszont csúnya errort dobna a fordító.

    Áh, mea maxima culpa.

    Most buktam egy interjúkérdést valószínűleg, abban a tévhitben éltem, hogy nem error a pontosságvesztés. Kipróbáltam, és tényleg fordítási hiba a vége.

  • fatal`
    titán

    Jójó, csak magyar szemszögből így érthetőbb. Nem kell trollkodni :P

    Nem trollkodásnak szántam, csak a pontosítás kedvéért. :P

  • Superhun
    addikt

    "Magától megtörténik" a törtrész levágása, nem kell hozzá explicit cast.

    += operátor használatával valóban nem kell, bocsi :B Csak fejben még leragadtam az ő megoldásánál, ott viszont csúnya errort dobna a fordító.

  • Karma
    félisten

    Két alapvető dolgot tegyünk tisztába:

    1. A tizedesvesszőt ponttal jelölik szinte minden prognyelvben :)
    2. Int típusú változnak nem adhatsz értékül lebegőpontos számot. Tehát vagy lebegőpontosként definiálod a weight változót,

    // lebegőpontos, a szám végén egy f betűvel jelöljük
    float weight = 250.0f;
    weight += 0.45f * 3;

    // dupla pontosságú lebegőpontos
    double weight = 250.0;
    weight += 0.45 * 3;

    vagy castolod a jobboldalt egész számmá:

    weight += (int)(0.45f * 3);

    Az utóbbinál figyelni kell, mert pontosságot veszíthetsz.

    Sok sikert a tanuláshoz! ;)

    "Magától megtörténik" a törtrész levágása, nem kell hozzá explicit cast.

  • Superhun
    addikt

    Nem a tizedesvesszőt jelölik ponttal, hanem az angolban tizedespont van. :)

    Jójó, csak magyar szemszögből így érthetőbb. Nem kell trollkodni :P

  • fatal`
    titán

    Két alapvető dolgot tegyünk tisztába:

    1. A tizedesvesszőt ponttal jelölik szinte minden prognyelvben :)
    2. Int típusú változnak nem adhatsz értékül lebegőpontos számot. Tehát vagy lebegőpontosként definiálod a weight változót,

    // lebegőpontos, a szám végén egy f betűvel jelöljük
    float weight = 250.0f;
    weight += 0.45f * 3;

    // dupla pontosságú lebegőpontos
    double weight = 250.0;
    weight += 0.45 * 3;

    vagy castolod a jobboldalt egész számmá:

    weight += (int)(0.45f * 3);

    Az utóbbinál figyelni kell, mert pontosságot veszíthetsz.

    Sok sikert a tanuláshoz! ;)

    Nem a tizedesvesszőt jelölik ponttal, hanem az angolban tizedespont van. :)

  • Superhun
    addikt

    Sziasztok

    Java programozást kezdtem tanulni könyvekből, mert érdekel nagyon, és tetszik is.
    Kellene egy kis segítség.

    int weight = 250;
    weight = weight + 0,45 * 3;

    Nem fogadja el a 0,45-öt (nem fordul le) és semmilyen nem egész számot. Megoldható valahogy ? vagy floatba lehet csak ?

    Előre is köszönöm.

    Két alapvető dolgot tegyünk tisztába:

    1. A tizedesvesszőt ponttal jelölik szinte minden prognyelvben :)
    2. Int típusú változnak nem adhatsz értékül lebegőpontos számot. Tehát vagy lebegőpontosként definiálod a weight változót,

    // lebegőpontos, a szám végén egy f betűvel jelöljük
    float weight = 250.0f;
    weight += 0.45f * 3;

    // dupla pontosságú lebegőpontos
    double weight = 250.0;
    weight += 0.45 * 3;

    vagy castolod a jobboldalt egész számmá:

    weight += (int)(0.45f * 3);

    Az utóbbinál figyelni kell, mert pontosságot veszíthetsz.

    Sok sikert a tanuláshoz! ;)

  • Frigo
    őstag

    Sziasztok

    Java programozást kezdtem tanulni könyvekből, mert érdekel nagyon, és tetszik is.
    Kellene egy kis segítség.

    int weight = 250;
    weight = weight + 0,45 * 3;

    Nem fogadja el a 0,45-öt (nem fordul le) és semmilyen nem egész számot. Megoldható valahogy ? vagy floatba lehet csak ?

    Előre is köszönöm.

    Cseréld le a vesszőt pontra (mivel ezt használják angolszász területen tizedes vessző helyett)

  • Nyle
    csendes tag

    Sziasztok

    Java programozást kezdtem tanulni könyvekből, mert érdekel nagyon, és tetszik is.
    Kellene egy kis segítség.

    int weight = 250;
    weight = weight + 0,45 * 3;

    Nem fogadja el a 0,45-öt (nem fordul le) és semmilyen nem egész számot. Megoldható valahogy ? vagy floatba lehet csak ?

    Előre is köszönöm.

  • MrSealRD
    veterán

    Köszönöm! Akkor jól gondoltam hogy egy gombnyomogatásra induló SessionFactory az vad dolog....

    http://javabrains.koushik.org/

    Ez szerintem az egyik legjobb alapozó...

  • bucsupeti
    senior tag

    A SessionFactory egy nagyon költséges objektum. Alkalmazásonként egyet "szoktak" használni...

    Hogy hová "teszed" az tervezési kérdés. A láthatóság és más egyéb témákról pedig még olvass utána mert ez így még kevés...
    Adok egy tippet: Nézd meg a Spring Framework hogyan kezeli ezt...

    Köszönöm! Akkor jól gondoltam hogy egy gombnyomogatásra induló SessionFactory az vad dolog....

  • MrSealRD
    veterán

    NetBeans Platformos kérdésem lenne.
    Szerintetek egy swing vastagkliens alkalmazásba hol célszerű a Hibernate konfigurációt intézni?
    Hol inicializálódjon a SessionFactory?

    Mivel ennek az egész program alatt működnie kell én arra gondoltam hogy a main()-ban valahol. Viszont ha ott indul és a main egyik lokális változójába teszem a SessionFactory-t, akkor azt máshol nem érem el.
    Ezért arra gondoltam hogy a main()-t tartalmazó osztály adattagja kell hoyg legyen a SessinFactory, így a teljes programban érvényes lesz és használható, lehet belőle Session-t kérni stb...

    Jó ez a gondolat? A NetBeans tutorialban egy külön metódus van definiálva a query futtatására, majd abból van megjelenítve (egy jTable komponensbe). Nem is ez a lényeg.
    Nekem az a fura hogy ez a tutorial-os példa minden egyes gombnyomásra futtat egy lekérdezést. Ehhez minden egyes alkalommal felépíti a SessionFactory-t (azaz beolvastatja a hibernate.cfg.xml-t és a mappingokat stb). Ez számomra logikátlannak tűnik és fölöslegesnek tűnik.
    A könyvek azt írják hogy elég egyetlen SessionFactory egy adatbáziskapcsolathoz és ezen indítsuk a session-öket és a tranzakciókat. Ezzel ez tök ellentétes.
    Erősítsetek meg, vagy magyarázzátok meg hogy miért jó úgy ahogy a tutorialban van. Ti hogy csinálnátok?

    Köszi a válaszokat!

    A SessionFactory egy nagyon költséges objektum. Alkalmazásonként egyet "szoktak" használni...

    Hogy hová "teszed" az tervezési kérdés. A láthatóság és más egyéb témákról pedig még olvass utána mert ez így még kevés...
    Adok egy tippet: Nézd meg a Spring Framework hogyan kezeli ezt...

  • bucsupeti
    senior tag

    NetBeans Platformos kérdésem lenne.
    Szerintetek egy swing vastagkliens alkalmazásba hol célszerű a Hibernate konfigurációt intézni?
    Hol inicializálódjon a SessionFactory?

    Mivel ennek az egész program alatt működnie kell én arra gondoltam hogy a main()-ban valahol. Viszont ha ott indul és a main egyik lokális változójába teszem a SessionFactory-t, akkor azt máshol nem érem el.
    Ezért arra gondoltam hogy a main()-t tartalmazó osztály adattagja kell hoyg legyen a SessinFactory, így a teljes programban érvényes lesz és használható, lehet belőle Session-t kérni stb...

    Jó ez a gondolat? A NetBeans tutorialban egy külön metódus van definiálva a query futtatására, majd abból van megjelenítve (egy jTable komponensbe). Nem is ez a lényeg.
    Nekem az a fura hogy ez a tutorial-os példa minden egyes gombnyomásra futtat egy lekérdezést. Ehhez minden egyes alkalommal felépíti a SessionFactory-t (azaz beolvastatja a hibernate.cfg.xml-t és a mappingokat stb). Ez számomra logikátlannak tűnik és fölöslegesnek tűnik.
    A könyvek azt írják hogy elég egyetlen SessionFactory egy adatbáziskapcsolathoz és ezen indítsuk a session-öket és a tranzakciókat. Ezzel ez tök ellentétes.
    Erősítsetek meg, vagy magyarázzátok meg hogy miért jó úgy ahogy a tutorialban van. Ti hogy csinálnátok?

    Köszi a válaszokat!

  • MrSealRD
    veterán

    Üdv! Letöröltem mindegyiket. Java 7 Update 9, Java(TM) 6 Update 32, JavaFX 2.11. Elmentem erre az oldalra http://www.java.com/en/download/chrome.jsp?locale=en. Letöltöttem ezt a fájlt: chromeinstall-7u9.exe. Gépet újraindítottam és megpróbáltam telepíteni, de akkor ezt a hibaüzenetet kaptam:
    Error - Java Installer
    Downloaded File C:\Documents and Settings\ITT AZ ADMIN JOGÚ FIÓKOM NEVE\Application Data\Sun\Java\jre1.7.0_09\java_sp.dll is corrupt.

    [OK]

    Az uninstalálásokat és a telepítést is az admin jogú fiókommal csináltam, amikor a nem admin jogú fiókkal nem voltam belépve. Mit kell most tenni?

    Innen próbáld leszedni az offline telepítőt: [link]

  • tknof1871
    őstag

    Túl sok fent a Java runtime, összekavarodott a registry. Töröld le az összes Java-t és csak a 7-et telepítsd fel.

    Üdv! Letöröltem mindegyiket. Java 7 Update 9, Java(TM) 6 Update 32, JavaFX 2.11. Elmentem erre az oldalra http://www.java.com/en/download/chrome.jsp?locale=en. Letöltöttem ezt a fájlt: chromeinstall-7u9.exe. Gépet újraindítottam és megpróbáltam telepíteni, de akkor ezt a hibaüzenetet kaptam:
    Error - Java Installer
    Downloaded File C:\Documents and Settings\ITT AZ ADMIN JOGÚ FIÓKOM NEVE\Application Data\Sun\Java\jre1.7.0_09\java_sp.dll is corrupt.

    [OK]

    Az uninstalálásokat és a telepítést is az admin jogú fiókommal csináltam, amikor a nem admin jogú fiókkal nem voltam belépve. Mit kell most tenni?

  • MrSealRD
    veterán

    Segítségeteket kérném, mert egyszerűen nem bukkanok rá a megoldásra.
    NetBeans 7.2-t használok.

    Egyszerű JDBC adatbáziskezelő demó programocskát csináltam, amivel demonstráltam a Sakila MySQL demó adatbázis egy tábláján végzett (CRUD) műveleteket. A program konzolra ír, nincs benne semmi extra, teszi a dolgát, működik rendesen.

    Csináltam egy másik példaprogramocskát (szintén konzolos), ami ugyan ezen műveleteket végezné el Hibernate-et alkalmazva. Ez is működik rendben.

    A problémám az hogy a Hibernate demó program az indulásakor logol a konzolra. Hallottam már a log4j-ről, de én ilyet nem kapcsoltam be sehol egyik programban sem. Ráadásul INFO szinten küldi a logot, azaz szinte mindent kiír. Ha JAR-t csinálok és az futtatom parancssorba ott is írja a logot a konzolra.
    Hogyan lehet ezt kikapcsolni? Miért kapcsolódott ez be a Hibernate-es programban?
    Itt a teljes log amit kiír:
    nov. 10, 2012 10:01:50 DE org.hibernate.cfg.annotations.Version <clinit>
    INFO: Hibernate Annotations 3.3.1.GA
    nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Environment <clinit>
    INFO: Hibernate 3.2.5
    nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Environment <clinit>
    INFO: hibernate.properties not found
    nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Environment buildBytecodeProvider
    INFO: Bytecode provider name : cglib
    nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Environment <clinit>
    INFO: using JDK 1.4 java.sql.Timestamp handling
    nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Configuration configure
    INFO: configuring from resource: /hibernate.cfg.xml
    nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Configuration getConfigurationInputStream
    INFO: Configuration resource: /hibernate.cfg.xml
    nov. 10, 2012 10:01:51 DE org.hibernate.cfg.Configuration addResource
    INFO: Reading mappings from resource : hibernatedemo/Actor.hbm.xml
    nov. 10, 2012 10:01:51 DE org.hibernate.cfg.Configuration doConfigure
    INFO: Configured SessionFactory: null
    nov. 10, 2012 10:01:51 DE org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
    INFO: Mapping class: hibernatedemo.Actor -> actor
    nov. 10, 2012 10:01:51 DE org.hibernate.cfg.AnnotationConfiguration secondPassCompile
    INFO: Hibernate Validator not found: ignoring
    nov. 10, 2012 10:01:51 DE org.hibernate.connection.DriverManagerConnectionProvider configure
    INFO: Using Hibernate built-in connection pool (not for production use!)
    nov. 10, 2012 10:01:51 DE org.hibernate.connection.DriverManagerConnectionProvider configure
    INFO: Hibernate connection pool size: 20
    nov. 10, 2012 10:01:51 DE org.hibernate.connection.DriverManagerConnectionProvider configure
    INFO: autocommit mode: false
    nov. 10, 2012 10:01:51 DE org.hibernate.connection.DriverManagerConnectionProvider configure
    INFO: using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost:3306/sakila
    nov. 10, 2012 10:01:51 DE org.hibernate.connection.DriverManagerConnectionProvider configure
    INFO: connection properties: {user=root}
    nov. 10, 2012 10:01:51 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: RDBMS: MySQL, version: 5.1.36-community-log
    nov. 10, 2012 10:01:51 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-5.1.18 ( Revision: tonci.grgin@oracle.com-20110930151701-jfj14ddfq48ifkfq )
    nov. 10, 2012 10:01:51 DE org.hibernate.dialect.Dialect <init>
    INFO: Using dialect: org.hibernate.dialect.MySQLDialect
    nov. 10, 2012 10:01:51 DE org.hibernate.transaction.TransactionFactoryFactory buildTransactionFactory
    INFO: Using default transaction strategy (direct JDBC transactions)
    nov. 10, 2012 10:01:51 DE org.hibernate.transaction.TransactionManagerLookupFactory getTransactionManagerLookup
    INFO: No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
    nov. 10, 2012 10:01:51 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Automatic flush during beforeCompletion(): disabled
    nov. 10, 2012 10:01:51 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Automatic session close at end of transaction: disabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: JDBC batch size: 15
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: JDBC batch updates for versioned data: disabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Scrollable result sets: enabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: JDBC3 getGeneratedKeys(): enabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Connection release mode: auto
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Maximum outer join fetch depth: 2
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Default batch fetch size: 1
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Generate SQL with comments: disabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Order SQL updates by primary key: disabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Order SQL inserts for batching: disabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory createQueryTranslatorFactory
    INFO: Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
    nov. 10, 2012 10:01:52 DE org.hibernate.hql.ast.ASTQueryTranslatorFactory <init>
    INFO: Using ASTQueryTranslatorFactory
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Query language substitutions: {}
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: JPA-QL strict compliance: disabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Second-level cache: enabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Query cache: disabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory createCacheProvider
    INFO: Cache provider: org.hibernate.cache.NoCacheProvider
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Optimize cache for minimal puts: disabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Structured second-level cache entries: disabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Statistics: disabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Deleted entity synthetic identifier rollback: disabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Default entity-mode: pojo
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Named query checking : enabled
    nov. 10, 2012 10:01:52 DE org.hibernate.impl.SessionFactoryImpl <init>
    INFO: building session factory
    nov. 10, 2012 10:01:52 DE org.hibernate.impl.SessionFactoryObjectFactory addInstance
    INFO: Not binding factory to JNDI, no JNDI name configured

    A log4j.porperties-ben tudsz ilyet állítani...

    Pl. log4j.logger.org.hibernate.SQL=FATAL

  • bucsupeti
    senior tag

    Segítségeteket kérném, mert egyszerűen nem bukkanok rá a megoldásra.
    NetBeans 7.2-t használok.

    Egyszerű JDBC adatbáziskezelő demó programocskát csináltam, amivel demonstráltam a Sakila MySQL demó adatbázis egy tábláján végzett (CRUD) műveleteket. A program konzolra ír, nincs benne semmi extra, teszi a dolgát, működik rendesen.

    Csináltam egy másik példaprogramocskát (szintén konzolos), ami ugyan ezen műveleteket végezné el Hibernate-et alkalmazva. Ez is működik rendben.

    A problémám az hogy a Hibernate demó program az indulásakor logol a konzolra. Hallottam már a log4j-ről, de én ilyet nem kapcsoltam be sehol egyik programban sem. Ráadásul INFO szinten küldi a logot, azaz szinte mindent kiír. Ha JAR-t csinálok és az futtatom parancssorba ott is írja a logot a konzolra.
    Hogyan lehet ezt kikapcsolni? Miért kapcsolódott ez be a Hibernate-es programban?
    Itt a teljes log amit kiír:
    nov. 10, 2012 10:01:50 DE org.hibernate.cfg.annotations.Version <clinit>
    INFO: Hibernate Annotations 3.3.1.GA
    nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Environment <clinit>
    INFO: Hibernate 3.2.5
    nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Environment <clinit>
    INFO: hibernate.properties not found
    nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Environment buildBytecodeProvider
    INFO: Bytecode provider name : cglib
    nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Environment <clinit>
    INFO: using JDK 1.4 java.sql.Timestamp handling
    nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Configuration configure
    INFO: configuring from resource: /hibernate.cfg.xml
    nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Configuration getConfigurationInputStream
    INFO: Configuration resource: /hibernate.cfg.xml
    nov. 10, 2012 10:01:51 DE org.hibernate.cfg.Configuration addResource
    INFO: Reading mappings from resource : hibernatedemo/Actor.hbm.xml
    nov. 10, 2012 10:01:51 DE org.hibernate.cfg.Configuration doConfigure
    INFO: Configured SessionFactory: null
    nov. 10, 2012 10:01:51 DE org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
    INFO: Mapping class: hibernatedemo.Actor -> actor
    nov. 10, 2012 10:01:51 DE org.hibernate.cfg.AnnotationConfiguration secondPassCompile
    INFO: Hibernate Validator not found: ignoring
    nov. 10, 2012 10:01:51 DE org.hibernate.connection.DriverManagerConnectionProvider configure
    INFO: Using Hibernate built-in connection pool (not for production use!)
    nov. 10, 2012 10:01:51 DE org.hibernate.connection.DriverManagerConnectionProvider configure
    INFO: Hibernate connection pool size: 20
    nov. 10, 2012 10:01:51 DE org.hibernate.connection.DriverManagerConnectionProvider configure
    INFO: autocommit mode: false
    nov. 10, 2012 10:01:51 DE org.hibernate.connection.DriverManagerConnectionProvider configure
    INFO: using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost:3306/sakila
    nov. 10, 2012 10:01:51 DE org.hibernate.connection.DriverManagerConnectionProvider configure
    INFO: connection properties: {user=root}
    nov. 10, 2012 10:01:51 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: RDBMS: MySQL, version: 5.1.36-community-log
    nov. 10, 2012 10:01:51 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-5.1.18 ( Revision: tonci.grgin@oracle.com-20110930151701-jfj14ddfq48ifkfq )
    nov. 10, 2012 10:01:51 DE org.hibernate.dialect.Dialect <init>
    INFO: Using dialect: org.hibernate.dialect.MySQLDialect
    nov. 10, 2012 10:01:51 DE org.hibernate.transaction.TransactionFactoryFactory buildTransactionFactory
    INFO: Using default transaction strategy (direct JDBC transactions)
    nov. 10, 2012 10:01:51 DE org.hibernate.transaction.TransactionManagerLookupFactory getTransactionManagerLookup
    INFO: No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
    nov. 10, 2012 10:01:51 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Automatic flush during beforeCompletion(): disabled
    nov. 10, 2012 10:01:51 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Automatic session close at end of transaction: disabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: JDBC batch size: 15
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: JDBC batch updates for versioned data: disabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Scrollable result sets: enabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: JDBC3 getGeneratedKeys(): enabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Connection release mode: auto
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Maximum outer join fetch depth: 2
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Default batch fetch size: 1
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Generate SQL with comments: disabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Order SQL updates by primary key: disabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Order SQL inserts for batching: disabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory createQueryTranslatorFactory
    INFO: Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
    nov. 10, 2012 10:01:52 DE org.hibernate.hql.ast.ASTQueryTranslatorFactory <init>
    INFO: Using ASTQueryTranslatorFactory
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Query language substitutions: {}
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: JPA-QL strict compliance: disabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Second-level cache: enabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Query cache: disabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory createCacheProvider
    INFO: Cache provider: org.hibernate.cache.NoCacheProvider
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Optimize cache for minimal puts: disabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Structured second-level cache entries: disabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Statistics: disabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Deleted entity synthetic identifier rollback: disabled
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Default entity-mode: pojo
    nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
    INFO: Named query checking : enabled
    nov. 10, 2012 10:01:52 DE org.hibernate.impl.SessionFactoryImpl <init>
    INFO: building session factory
    nov. 10, 2012 10:01:52 DE org.hibernate.impl.SessionFactoryObjectFactory addInstance
    INFO: Not binding factory to JNDI, no JNDI name configured

  • Superhun
    addikt

    Üdv! A Jdownloader-t nem tudom elindítani. Azt írja:
    Launch4J
    The registry refers to a nonexistent Java Runtime Enviroment installation or the runtimne is corrupted
    A rendszer nem találja a megadott elérési utat

    A Programok telepítése és törlése ezeket a Java-kat sorolja:
    Java 7 Update 9
    Java(TM) 6 Update 32
    JavaFX 2.11

    Néha feljön a tálcán egy kis ikon, hogy frissíthetem a Java-t, de sosem sikerül végig csinálni. Most nem tudom, mi a hibaüzenet abban az esetben. Mit csináljak?

    Túl sok fent a Java runtime, összekavarodott a registry. Töröld le az összes Java-t és csak a 7-et telepítsd fel.

  • tknof1871
    őstag

    Üdv! A Jdownloader-t nem tudom elindítani. Azt írja:
    Launch4J
    The registry refers to a nonexistent Java Runtime Enviroment installation or the runtimne is corrupted
    A rendszer nem találja a megadott elérési utat

    A Programok telepítése és törlése ezeket a Java-kat sorolja:
    Java 7 Update 9
    Java(TM) 6 Update 32
    JavaFX 2.11

    Néha feljön a tálcán egy kis ikon, hogy frissíthetem a Java-t, de sosem sikerül végig csinálni. Most nem tudom, mi a hibaüzenet abban az esetben. Mit csináljak?

  • bucsupeti
    senior tag

    Szerintem is. Ha az interfészek stabilak és factory methodok hozzák létre az implementációkat, semmi akadálya a JAR-ok kicserélésének.

    ok. köszönöm!

  • Karma
    félisten

    Ha külön van csomagolva és az interfész nem változik, akkor csak ki kell cserélned a csomagot (imho).

    Szerintem is. Ha az interfészek stabilak és factory methodok hozzák létre az implementációkat, semmi akadálya a JAR-ok kicserélésének.

  • sztanozs
    veterán

    A példa erőltetett. Persze nem így célszerű ezt megoldani.
    Igazából azt szeretném, hogy SE környezetben valahogy modellezni, példaalkalmazást készíteni egy háromrétegű architektúra demonstrálására.
    [ui] + [üzleti logika] + [adatbázis]

    Az ui lenne az a rész amit nem fordítok újra. Az üzleti logikában történik változás és azt akarom demonstrálni hogy ennek a modul változtatása független a többi rétegtől. Az adatbázis meg az ami.

    Nyilván ez normális felhasználás esetén JavaBean, servlet meg minden EE csoda segítségével gyönyörűen megvalósítható, de éppen ezeket szeretném "hanyagolni" és SE környezetben, lokálisan valahogy demonstrálni.

    Ha külön van csomagolva és az interfész nem változik, akkor csak ki kell cserélned a csomagot (imho).

  • bucsupeti
    senior tag

    Ha gányolni akarsz, semmi akadálya annak, hogy lefordítsd az egy szál .class fájtt. és kicseréld a JAR-on belül (hiszen az csak egy átnevezett zip)... Feltéve persze, hogy az interfész egyáltalán nem változott.

    De ha ilyen jellegű változásra fel akarsz készülni, miért nem konfigurációként tárolod az ÁFA kulcsot, nem pedig a kódba égetve? :U

    A példa erőltetett. Persze nem így célszerű ezt megoldani.
    Igazából azt szeretném, hogy SE környezetben valahogy modellezni, példaalkalmazást készíteni egy háromrétegű architektúra demonstrálására.
    [ui] + [üzleti logika] + [adatbázis]

    Az ui lenne az a rész amit nem fordítok újra. Az üzleti logikában történik változás és azt akarom demonstrálni hogy ennek a modul változtatása független a többi rétegtől. Az adatbázis meg az ami.

    Nyilván ez normális felhasználás esetén JavaBean, servlet meg minden EE csoda segítségével gyönyörűen megvalósítható, de éppen ezeket szeretném "hanyagolni" és SE környezetben, lokálisan valahogy demonstrálni.

  • Karma
    félisten

    Nem biztos hogy teljesen jól fogalmaztam meg a dolgokat.

    Szóval azt szeretném, hogy van egy "csomagom", ami tartalmaz egy osztálydefiníciót (csomag1.java). Ezután készítek egy java programot (teszt.java), ami használja a csomagban definiált osztályt (import csomag1).
    Ezután változtatok a csomag1.java fájlban, újrafordítom a csomag1-et (de a teszt.java-t nem!!!!) és az eredeti teszt.class újrafordítás nélkül a csomag1 változtatásait ismeri.

    Lehet hogy egyszerűbb konkért példán keresztül:

    Szóval Aru.java:

    class Aru {
    private String aruNev;
    private int nettoAr;
    [B]private static int afaKulcs=27;[/B]

    public Aru(){
    }

    public Aru(String aruNev, int nettoAr, int afaKulcs){
    this.aruNev=aruNev;
    this.nettoAr=nettoAr;
    this.afaKulcs=afaKulcs;
    }

    public String getAruNev(){
    return aruNev;
    }

    public void setAruNev(String aruNev){
    this.aruNev=aruNev;
    }

    public int getNettoAr(){
    return nettoAr;
    }

    public void setNettoAr(int nettoAr){
    this.nettoAr=nettoAr;
    }

    public float getAfaErtek(){
    return nettoAr*afaKulcs/100;
    }

    }

    Ezután megírom a király számlázó programot ami használja az Aru osztályt (Szamlaz.java) és lefordítom (Szamlaz.class). Közben megváltozik az üzleti logika és ezért a statikus adattagot átírom az új áfa értékre. Lefordítom az Aru.java-t és ezt a számlázó program újrafordítás nélkül tudja alkalmazni.
    Az azért már kiderült hogy erre nem jó a csomag módszer, mert teljes újrafordítás kell.
    Van erre valami módszer Java SE-ben? Vagy ehhez már valamiféle enterprise megoldás kell?

    Ha gányolni akarsz, semmi akadálya annak, hogy lefordítsd az egy szál .class fájtt. és kicseréld a JAR-on belül (hiszen az csak egy átnevezett zip)... Feltéve persze, hogy az interfész egyáltalán nem változott.

    De ha ilyen jellegű változásra fel akarsz készülni, miért nem konfigurációként tárolod az ÁFA kulcsot, nem pedig a kódba égetve? :U

  • bucsupeti
    senior tag

    Nem biztos hogy teljesen jól fogalmaztam meg a dolgokat.

    Szóval azt szeretném, hogy van egy "csomagom", ami tartalmaz egy osztálydefiníciót (csomag1.java). Ezután készítek egy java programot (teszt.java), ami használja a csomagban definiált osztályt (import csomag1).
    Ezután változtatok a csomag1.java fájlban, újrafordítom a csomag1-et (de a teszt.java-t nem!!!!) és az eredeti teszt.class újrafordítás nélkül a csomag1 változtatásait ismeri.

    Lehet hogy egyszerűbb konkért példán keresztül:

    Szóval Aru.java:

    class Aru {
    private String aruNev;
    private int nettoAr;
    [B]private static int afaKulcs=27;[/B]

    public Aru(){
    }

    public Aru(String aruNev, int nettoAr, int afaKulcs){
    this.aruNev=aruNev;
    this.nettoAr=nettoAr;
    this.afaKulcs=afaKulcs;
    }

    public String getAruNev(){
    return aruNev;
    }

    public void setAruNev(String aruNev){
    this.aruNev=aruNev;
    }

    public int getNettoAr(){
    return nettoAr;
    }

    public void setNettoAr(int nettoAr){
    this.nettoAr=nettoAr;
    }

    public float getAfaErtek(){
    return nettoAr*afaKulcs/100;
    }

    }

    Ezután megírom a király számlázó programot ami használja az Aru osztályt (Szamlaz.java) és lefordítom (Szamlaz.class). Közben megváltozik az üzleti logika és ezért a statikus adattagot átírom az új áfa értékre. Lefordítom az Aru.java-t és ezt a számlázó program újrafordítás nélkül tudja alkalmazni.
    Az azért már kiderült hogy erre nem jó a csomag módszer, mert teljes újrafordítás kell.
    Van erre valami módszer Java SE-ben? Vagy ehhez már valamiféle enterprise megoldás kell?

  • Karma
    félisten

    Köszönöm az infókat!

    @Karma: mi a Maven pontosan? Mire használható?

    Kikapcsolódás (mármint sok órát bele lehet ölni), XML fetisisztáknak örömforrás, de mindenek felett egy Java build rendszer.

    Amiben a legkisebb projekteket is tudja segíteni: 1) sablonokból (ún. archetípus) többszázféle projektet létre lehet hozni egyszerűen; 2) ha bármiféle libraryre szükséged van(*), csak megadod függőségként, a Maven levadássza, felhasználja a fordításnál, sőt akár egybe is csomagolja neked a programoddal; 3) ad egy egységes, mindenre kiterjedő keretet a fordításnak (előfeldolgozás -> fordítás -> tesztelés -> csomagolás -> archiválás), ami szabadon konfigurálható, és 4) tovább bővíthető szinte bármilyen célra(**).

    Hatalmas változást hozott a Java fejlesztői munkáimban, hogy circa egy éve beleástam magam. Mindenképp ajánlom, hogy próbáld ki :) És ha van valami konkrét kérdés, címezd ide, elég lelkes vagyok e kapcsán :P

    Egyébként a fentebbiek hatalmas projekteknél hatványozottan jól jönnek. Nincs is jobb, mint kézzel másolgatni többszáz dependenciát, és többtíz Ant projektet sokezer soros kézi szkripttel fordítani...

    (*) A nyilvánosan elérhető csomagok között legegyszerűbben a search.maven.org-on tudsz keresni. Ez az ún. Maven Centralt indexeli - ami kvázi az egész Java világ.

    (**) Rengeteg plugin elérhető el, legyen szó kódanalízisről, dokumentációgenerálásról, XML validálásról, LESS->CSS konverzióról, source controlról, tényleg bármiről. Sőt, még Antot is képes beágyazva futtatni, így még tovább bővülnek a lehetőségek.

  • Karma
    félisten

    Megadod a classpath-ban az osztály elérési útját és máris használható. Úgy szokták, hogy jar fájlokat buildeznek, amik gyakorlitilag library-ként szolgálnak és az ezekben található osztályokat includolják a főprogramban.

    Ha külső, komolyabb librarykről van szó, vagy nagyobb projektekről, megérheti a Mavent is bevonni a játékba. Mindent és még annál is többet megcsinál.

    Bár nem hiszek abban, hogy van egy kritikus minimális méret, ami alatt nem éri meg rendesen szervezett projektet gyártani :)

Új hozzászólás Aktív témák

Hirdetés