Hirdetés

Keresés

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

  • floatr
    veterán

    Sziasztok.

    Egy Maven projectet próbálok készíteni, ahol a program eredményeit egy json fileba írom és onnan olvasom vissza a korábbiakat.

    Ha az \src\main\resources\results\ mappában helyezem el a results.json-t akkor Mavennel futtatva a programot tökéletesen írja és olvassa az adatokat, bemásolja a \target\classes\results\ mappába.
    A probléma az, hogy egy futtatható .jar-t is készítek ez viszont nem éri el így a filet.

    Egy megoldás, ha nem a resources-be rakom, viszont ekkor mindkét esetben közvetlen a gyökérbe rakja a jsont, ez így annyira nem tetszik.

    Hogyan tudnám pl. simán egy results mappába rakni úgy, hogy mindkét esetben hozzáférjen a program?

    Remélem érthető a problémám :B :R

    Ha egy app file-okon keresztül kommunikál a külvilággal, akkor file-okat ell kezelni ;)

    #11494 mobal
    :R :D

    #11497 btraven
    Iterator vagy stream

  • mobal
    nagyúr

    Sziasztok.

    Egy Maven projectet próbálok készíteni, ahol a program eredményeit egy json fileba írom és onnan olvasom vissza a korábbiakat.

    Ha az \src\main\resources\results\ mappában helyezem el a results.json-t akkor Mavennel futtatva a programot tökéletesen írja és olvassa az adatokat, bemásolja a \target\classes\results\ mappába.
    A probléma az, hogy egy futtatható .jar-t is készítek ez viszont nem éri el így a filet.

    Egy megoldás, ha nem a resources-be rakom, viszont ekkor mindkét esetben közvetlen a gyökérbe rakja a jsont, ez így annyira nem tetszik.

    Hogyan tudnám pl. simán egy results mappába rakni úgy, hogy mindkét esetben hozzáférjen a program?

    Remélem érthető a problémám :B :R

    Bár nem tartozik a témához, de ha nem must a maven válts gradle-ra, tanács. :D

    Menet közben a jar-t nem fogod tudni írni. Onnan olvasni tudsz.

  • Zsoxx
    őstag

    Köszi mindkettőtöknek!

    Interfészt és absztrakt osztályokat használtam már pár feladat során, pl. ezt az alakzatos példát is csináltam már absztrakt osztály kiterjesztésével. :B

    A kérdésem inkább a sima osztályokra vonatkozott, hogy azok esetében mikor érdemes tovább bővíteni.

    Ezt tanulmányozva talán kicsit közelebb kerülsz a válaszhoz.
    Fent van a megoldása is egyébként.

  • M_AND_Ms
    veterán

    Köszi mindkettőtöknek!

    Interfészt és absztrakt osztályokat használtam már pár feladat során, pl. ezt az alakzatos példát is csináltam már absztrakt osztály kiterjesztésével. :B

    A kérdésem inkább a sima osztályokra vonatkozott, hogy azok esetében mikor érdemes tovább bővíteni.

    Egy konkrét feladat kapcsán amint érdemes lesz a bővítés, azt azonnal észre fogod venni.

  • Drizzt
    nagyúr

    Sziasztok!

    Valószínűleg elég triviális lesz a kérdésem :B

    2 éve programozok, idén érettségiztem emelt informatikából (Java-ban), alapvetően értem az OOP lényegét, tisztában vagyok az alapokkal, viszont az osztályok közötti öröklődés hasznát nem igazán látom át.

    Egy egyszerű példával:
    Adott egy car osztály, benne egy String marka mező. Ennek a mezőnek adhatok akármilyen értéket. (Subaru, Citroen, Mazda...) Később ezen osztály objektumait pl. hozzáadhatom egy ArrayListhez amiben egy if(marka=="Mazda") feltétellel rögtön tudok kezdeni valamit.
    Miért lenne jobb ha a car osztályt terjeszteném ki több al-osztályra? :F

    Elképzelhető, hogy nagyon rossz a példám mert nem látom át az egész lényegét, gyakorlati alkalmazását.
    Valaki fel tudna világosítani, esetleg kész gyakorlati példát mutatni? :R

    Ebből sajnos úgy tűnik, hogy éppen nem érted az OOP lényegét, de majd idővel az is eljön. :)

    Én az öröklésből elsőre a polimorfizmust emelném ki. Van például egy Alakzat osztályod. Ebben van egy teruletSzamitas metódus. Van két Alakzatod, Kor és Negyzet. Kor és Negyzet nyilván teljesen máshogy számítja ki a területét, más belső tényezők alapján. De mindkettőben közös, hogy rendelkeznek területtel, és neked ha van egy raklapnyi Alakzatod, egyszerűbb dolgod van, ha mindegyik objektum megmondja magáról, hogy az ő területe mennyi. Persze itt is megcsinálhatod, hogy valamilyen típus változóban elrakod az Alakzat típusát, és ez alapján döntöd el a területszámító függvényben, hogy mit kell tenni. De ez hosszú távon teljesen fenntarthatatlan lesz. Ugyanis ha hozzáadsz egy új Alakzatot, 99%, hogy nem fogod megkeresni az összes if-et, ami Alakzatokat kezel, s el fog romlani a programod. Míg ha a teruletSzamitas abstract metódus, vagy interface-ben van megadva, akkor amint létrehozol egy újfajta Alakzatot, kötelező lesz megadnod a teruletSzamitas fuggveny implementaciojat. Másik probléma: hogyan kezeled azt, hogy egy Kor átmérővel rendelkezik, de egy Negyzet pedig oldal hosszúsággal? Mondhatod, hogy van egy változód, ami vagy az egyik, vagy a másik dolgot reprezentálja. Viszont ha bevezetsz egy téglalapot, akkor már nem lesz elég egy oldal, kettő kell. Ilyenkor mit csinálsz? Ha az Alakzatokban csak az a közös, hogy van számítható területük, akkor nem kell ezzel foglalkoznod. Minden osztályod csak annyit fog magából megmutatni a külvilágnak, ami feltétlenül szükséges.

  • bandi0000
    nagyúr

    Sziasztok!

    Valószínűleg elég triviális lesz a kérdésem :B

    2 éve programozok, idén érettségiztem emelt informatikából (Java-ban), alapvetően értem az OOP lényegét, tisztában vagyok az alapokkal, viszont az osztályok közötti öröklődés hasznát nem igazán látom át.

    Egy egyszerű példával:
    Adott egy car osztály, benne egy String marka mező. Ennek a mezőnek adhatok akármilyen értéket. (Subaru, Citroen, Mazda...) Később ezen osztály objektumait pl. hozzáadhatom egy ArrayListhez amiben egy if(marka=="Mazda") feltétellel rögtön tudok kezdeni valamit.
    Miért lenne jobb ha a car osztályt terjeszteném ki több al-osztályra? :F

    Elképzelhető, hogy nagyon rossz a példám mert nem látom át az egész lényegét, gyakorlati alkalmazását.
    Valaki fel tudna világosítani, esetleg kész gyakorlati példát mutatni? :R

    Sztem rosszul közelíted meg a dolgot képzeld el így

    Van egy osztályod ami tárolja az autók fő tulajdonságait mint pl Le, fogyasztás stb, amit minden autóra el lehet sütni, ebből örökölnek a konkrét típusok, amiknek meg lesznek a fő osztály adattagjai, mint a Le meg a fogyasztás, de ehhez hozzá rakhat még mást, ami esetleg csak rá vonatkozik

    Az egésznek az a lényege, hogy ha hasonló osztályaid vannak, akkor nem mindegyikben hozod létre ugyan azokat a változókat, hanem csinálsz egy ős osztályt, ami tartalmazza ezeket a közös tagokat és a többi csak örökli

    + ugyan ez igaz a függvényeire is, pl ha másodfokú egyenletet szeretnél kiszámolni, akkor ha már van egy osztályod ami össze ad két számot, akkor ezt se kell megírni megint csak használni

    Nyilván ezek móricka példák, és semmit értelmét nem látod ezeknek, de egy nagy alkalmazásban majd igen jó jönnek ezek

  • skoda12
    aktív tag

    Rákerestem, lehetséges hogy ez az oka.

    Már csak azt nem tudom, hogy oldjam meg :DDD

    Az action és event listenereidet a framework triggereli, így azok az event dispatcher threaden fognak futni, tehát lehet belőlük UI elemeket módosítani. A többi osztálynál figyelni kell, hogy ha UI elemeket módosítasz, akkor a SwingUtilities valamelyik invoke...() metódusával legyenek futtatva a megfelelő kódrészek (ezek végül így az event dispatcher threaden fognak futni). Ezzel le vannak fedve a UI-os részek, de neked kell tudni, hogy használsz-e még máshol threadeket és azok helyesen osztják-e meg egymás között az adatokat. Mondjuk valószínűleg az a rész is érdekes, ahol a vonalkódolvasótól átveszed az adatot és kipakolod a UI-ra.

    Igazából látni kéne az egész kódot, hogy meg lehessen állapítani hol van probléma az adat megosztással, de egy teljes projektet nincs időm átnézni és kidebuggolni. Érdemes lenne a multithreadingnek és memory consistency erroroknak utánaolvasnod.

  • skoda12
    aktív tag

    Ismét ezzel táblázatos gyakorló projektemmel van gond, 2 napja próbálkozok mindennel IS, többször újraírtam a kérdéses részt, de nem akarja az igazat :(

    Van 1 textfield, ahova vonalkód olvasóval lehet bevinni az adatokat, a vonalkód olvasó az olvasás után ENTER-t "üt".
    A kód szépen megtalálja, végrehajtja a megfelelő utasításokat a saját gépemen amin írom (i7 3.7Ghz + 12GB ram). A probléma akkor következik, mikor egy lassú pentiumos laptopon futtatom, hibajelenség:
    - 5x olvastam le ugyanazt a kódot egymás után, és össze vissza dobál ✔-t és ✖-et ovlasás után.
    - sokszor elkezd ugrálni a táblázatban még azelőtt mielőtt érkezne az Enter... (nincs más key event hozzárendelve)

    Mivel teljesen random viselkedik ugyanazon vonalkód esetében is már csak arra tudtam gondolni, hogy "túl" gyors neki az olvasás, vagy nem elég hatékony a kódom, más logikus magyarázatot nem találtam.. :U

    De hátha ti jobban átlátjátok :B

    Az Enter után keresem ki, hogy melyik áruról van szó:

    private void text_searchKeyReleased(java.awt.event.KeyEvent evt) {
      if(evt.getKeyCode() == java.awt.event.KeyEvent.VK_ENTER) {
        indextalalat = -2;
        zText.setLength(0); //Stringbuildert használok, hogy megmaradjon az utolsó érték a field ürítése után is.
        zText.append(text_search.getText());
        for (int i = 0; i <= tabla.getRowCount()-1; i++) {
        if (tabla.getValueAt(i, 2).toString().replaceAll("\\s+","").equals(text_search.getText())) {
        indextalalat = i;
        break;
      }
    }

        if (indextalalat != -2) {
            text_search.setText(null);
            talalatLabel0.setText("✔");
            tabla.setRowSelectionInterval(indextalalat, indextalalat);
            tabla.scrollRectToVisible(new Rectangle(tabla2.getCellRect(indextalalat, 0, true)));
            setTexts();
          } else {
            text_search.setText(null);
            talalatLabel0.setText("✖");
            tabla.removeColumnSelectionInterval(0, tabla.getColumnCount()-1);
          }

        }

    }

    Ha nem konzisztensen jó / rossz eredményt kapsz, akkor valószínűleg valami threading issue lesz. Ezeket a swinges / awt-s elemeket csak az event dispatcher threadről szokták frissíteni, mert a többségük nem thread safe.

  • orc88
    őstag

    Sziasztok!

    Van egy metódus, ami a táblázatban található adatokat kiírja Textfieldekbe. Ezt a metódust hozzá adtam a tábla kattintásos eseményéhez, amikor kattint valamelyik elemre a táblázatban szépen kiírja a megfelelő fieldbe az adatokat.

    Gondoltam megcsinálom ugyanezt VK_UP és VK_DOWN key eventekre is, így nyilakkal történő lépkedés esetén frissíti a fieldek tartalmát.

    A probléma a következő:
    1 lépéssel le van maradva minden gombnyomásnál, mindig az előző gombnyomás után kijelölt sor adatait szedi ki a táblából :U
    Mi lehet a gubanc? :F

    A setText() metódus:
    public void setTexts() {
    DefaultTableModel model = (DefaultTableModel) tabla.getModel();
    text_id.setText(model.getValueAt(tabla.getSelectedRow(), 0).toString());
    text_nev.setText(model.getValueAt(tabla.getSelectedRow(), 1).toString());
    text_cikkszam.setText(model.getValueAt(tabla.getSelectedRow(), 2).toString());
    text_elar.setText(model.getValueAt(tabla.getSelectedRow(), 7).toString());
    text_datum0.setText(model.getValueAt(tabla.getSelectedRow(), 9).toString());
    }

    És ahol meghívom:
    private void tablaKeyPressed(java.awt.event.KeyEvent evt) {
    if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_UP || evt.getKeyCode() ==
    java.awt.event.KeyEvent.VK_DOWN) {
    setTexts();
    }
    }

    Ismét ezzel táblázatos gyakorló projektemmel van gond, 2 napja próbálkozok mindennel IS, többször újraírtam a kérdéses részt, de nem akarja az igazat :(

    Van 1 textfield, ahova vonalkód olvasóval lehet bevinni az adatokat, a vonalkód olvasó az olvasás után ENTER-t "üt".
    A kód szépen megtalálja, végrehajtja a megfelelő utasításokat a saját gépemen amin írom (i7 3.7Ghz + 12GB ram). A probléma akkor következik, mikor egy lassú pentiumos laptopon futtatom, hibajelenség:
    - 5x olvastam le ugyanazt a kódot egymás után, és össze vissza dobál ✔-t és ✖-et ovlasás után.
    - sokszor elkezd ugrálni a táblázatban még azelőtt mielőtt érkezne az Enter... (nincs más key event hozzárendelve)

    Mivel teljesen random viselkedik ugyanazon vonalkód esetében is már csak arra tudtam gondolni, hogy "túl" gyors neki az olvasás, vagy nem elég hatékony a kódom, más logikus magyarázatot nem találtam.. :U

    De hátha ti jobban átlátjátok :B

    Az Enter után keresem ki, hogy melyik áruról van szó:

    private void text_searchKeyReleased(java.awt.event.KeyEvent evt) {
      if(evt.getKeyCode() == java.awt.event.KeyEvent.VK_ENTER) {
        indextalalat = -2;
        zText.setLength(0); //Stringbuildert használok, hogy megmaradjon az utolsó érték a field ürítése után is.
        zText.append(text_search.getText());
        for (int i = 0; i <= tabla.getRowCount()-1; i++) {
        if (tabla.getValueAt(i, 2).toString().replaceAll("\\s+","").equals(text_search.getText())) {
        indextalalat = i;
        break;
      }
    }

        if (indextalalat != -2) {
            text_search.setText(null);
            talalatLabel0.setText("✔");
            tabla.setRowSelectionInterval(indextalalat, indextalalat);
            tabla.scrollRectToVisible(new Rectangle(tabla2.getCellRect(indextalalat, 0, true)));
            setTexts();
          } else {
            text_search.setText(null);
            talalatLabel0.setText("✖");
            tabla.removeColumnSelectionInterval(0, tabla.getColumnCount()-1);
          }

        }

    }

  • Drizzt
    nagyúr

    Sziasztok!

    Van egy metódus, ami a táblázatban található adatokat kiírja Textfieldekbe. Ezt a metódust hozzá adtam a tábla kattintásos eseményéhez, amikor kattint valamelyik elemre a táblázatban szépen kiírja a megfelelő fieldbe az adatokat.

    Gondoltam megcsinálom ugyanezt VK_UP és VK_DOWN key eventekre is, így nyilakkal történő lépkedés esetén frissíti a fieldek tartalmát.

    A probléma a következő:
    1 lépéssel le van maradva minden gombnyomásnál, mindig az előző gombnyomás után kijelölt sor adatait szedi ki a táblából :U
    Mi lehet a gubanc? :F

    A setText() metódus:
    public void setTexts() {
    DefaultTableModel model = (DefaultTableModel) tabla.getModel();
    text_id.setText(model.getValueAt(tabla.getSelectedRow(), 0).toString());
    text_nev.setText(model.getValueAt(tabla.getSelectedRow(), 1).toString());
    text_cikkszam.setText(model.getValueAt(tabla.getSelectedRow(), 2).toString());
    text_elar.setText(model.getValueAt(tabla.getSelectedRow(), 7).toString());
    text_datum0.setText(model.getValueAt(tabla.getSelectedRow(), 9).toString());
    }

    És ahol meghívom:
    private void tablaKeyPressed(java.awt.event.KeyEvent evt) {
    if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_UP || evt.getKeyCode() ==
    java.awt.event.KeyEvent.VK_DOWN) {
    setTexts();
    }
    }

    Én ugyan nem értek az AWT-hez, de az hogyan találja ki up, vagy down arrow lenyomásra, hogy fel, vagy le kell állítania az aktuális sort?
    A handler amit írtál, mindenképpen beállítja a textet a kijelölt sor alapján. De mi állítja be a kijelölt sort? Van valami az AWT-ben ami automatikusan állítja a sor billentyű lenyomásra? Ebben az esetben valamilyen olyan listenert kellene meghívni ami biztosan a selection megváltozása után lesz meghívva.

    Itt pl. a ListSelectionListener.

  • orc88
    őstag

    Sziasztok!

    Van egy metódus, ami a táblázatban található adatokat kiírja Textfieldekbe. Ezt a metódust hozzá adtam a tábla kattintásos eseményéhez, amikor kattint valamelyik elemre a táblázatban szépen kiírja a megfelelő fieldbe az adatokat.

    Gondoltam megcsinálom ugyanezt VK_UP és VK_DOWN key eventekre is, így nyilakkal történő lépkedés esetén frissíti a fieldek tartalmát.

    A probléma a következő:
    1 lépéssel le van maradva minden gombnyomásnál, mindig az előző gombnyomás után kijelölt sor adatait szedi ki a táblából :U
    Mi lehet a gubanc? :F

    A setText() metódus:
    public void setTexts() {
    DefaultTableModel model = (DefaultTableModel) tabla.getModel();
    text_id.setText(model.getValueAt(tabla.getSelectedRow(), 0).toString());
    text_nev.setText(model.getValueAt(tabla.getSelectedRow(), 1).toString());
    text_cikkszam.setText(model.getValueAt(tabla.getSelectedRow(), 2).toString());
    text_elar.setText(model.getValueAt(tabla.getSelectedRow(), 7).toString());
    text_datum0.setText(model.getValueAt(tabla.getSelectedRow(), 9).toString());
    }

    És ahol meghívom:
    private void tablaKeyPressed(java.awt.event.KeyEvent evt) {
    if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_UP || evt.getKeyCode() ==
    java.awt.event.KeyEvent.VK_DOWN) {
    setTexts();
    }
    }

    keyReleased-re kellett rakni, bocsi az amatőrködésért :B :R

  • M_AND_Ms
    veterán

    Van egy programom, amivel adatbázist kezelek SQLite-tal. Ezt azzal szeretném kiegészíteni, hogy egy másik adatbázis adatait hozzáfűzöm. A probléma az, hogy a másik adatbázis egy régi .dbf (dBase III / IV). Java 8-tól kezdve ahogy olvastam ezeket nem nagyon lehet kezelni JDBC-vel. A különféle libek amiket találtam és kezelik a .dbf-t mind fizetősek, amik ingyenesek azokkal viszont nem tudok SQL lekérdezést használni. Mire lenne érdemes alakítani ezeket a dbf fileokat, hogy utána mindent egy helyi adatbázisban tároljak és egyszerűen tudjak SQL lekérdezéseket végezni? :F

    Ha szükséges az SQLite-ot is cserélhetem másra ha van javaslat.

    Ha javaból, vagy mysqlből eléred, akkor elsőnek nyers adatként áthúzod a dbf tartalmát az adatbázisodba, aztán ott már könnyedén tudsz belőle dolgozni.
    Anno 10 éve én is így dolgoztam be dbf-t, de az eszközre már nem emlékszem (azt hiszem, mivel Ms-sql volt az adatbázis, annak a pont ilyen feladatokra való Dts eszközével dolgoztam)

  • Aethelstone
    addikt

    Van egy programom, amivel adatbázist kezelek SQLite-tal. Ezt azzal szeretném kiegészíteni, hogy egy másik adatbázis adatait hozzáfűzöm. A probléma az, hogy a másik adatbázis egy régi .dbf (dBase III / IV). Java 8-tól kezdve ahogy olvastam ezeket nem nagyon lehet kezelni JDBC-vel. A különféle libek amiket találtam és kezelik a .dbf-t mind fizetősek, amik ingyenesek azokkal viszont nem tudok SQL lekérdezést használni. Mire lenne érdemes alakítani ezeket a dbf fileokat, hogy utána mindent egy helyi adatbázisban tároljak és egyszerűen tudjak SQL lekérdezéseket végezni? :F

    Ha szükséges az SQLite-ot is cserélhetem másra ha van javaslat.

    Vagy dbf->csv, de a csv ugye nem hierarchikus vagy pedig a dbf-ből insertes scriptet generálsz. Szerintem az utóbbi jobb.

    Ez ingyenes: https://github.com/albfernandez/javadbf

  • Aethelstone
    addikt

    És tényleg működik nélküle is :DD :R Hétvégén foglalkoztam vele, csak mivel napi használatban van az olvasó így nem tudták ideadni, de most kipróbáltam és príma. :B Köszi!

    RexpecT: Igen ezeket megtaláltam, szívtam is vele pár órát mert már gyakorlatilag a linkek fele nem élt, de így igazából már nem is nagyon van rá szükségem, mindenesetre köszönöm! :)

    Szívesen :)

  • RexpecT
    addikt

    Sziasztok!

    Adott egy vonalkód olvasó. Hogyan tudnám ennek az inputjait kezelni egy java programmal? Az oldalukon a JavaPOS-t említik de ahhoz alig találok valamit a neten :B
    Valaki tudna segíteni, hogy merre induljak el?

    Ahogy nézem ezt az SDK-t kell leszedni hozzá, a windowsos verzióban benne van az általad említett driver is.
    Itt a developer guide hozzá.

  • Aethelstone
    addikt

    Sziasztok!

    Adott egy vonalkód olvasó. Hogyan tudnám ennek az inputjait kezelni egy java programmal? Az oldalukon a JavaPOS-t említik de ahhoz alig találok valamit a neten :B
    Valaki tudna segíteni, hogy merre induljak el?

    Elvileg amikor beolvasol egy vonalkódot, akkor a vonalkódhoz tartozó számsort kapod. Ez valami input mezőben megjelenik. Eddig stimt? Utána ezzel a számsorral azt csinálsz, amit akarsz.

  • Aethelstone
    addikt

    Google Drive-ba felraktam kompletten ami kell a feladathoz, és ahol elakadtam.

    Pastebin a fő osztályról.
    Ami még kellhet hozzá a 'tranzakció' osztály (tranzak.java):
    public class tranzak {
    public int id;
    public ArrayList<String> term;

    public tranzak(ArrayList<String> _term) {
    this.term = _term;
    }

    public tranzak(int _id, ArrayList<String> _term) {
    this.id = _id;
    this.term = _term;
    }

    public void getTerm() {
    for (int i = 0; i <= this.term.size()-1; i++) {
    System.out.println(this.term.get(i));
    }
    }

    public void addTerm(String _ujterm) {
    this.term.add(_ujterm);
    }

    }

    Amire rájöttem időközben:
    Main.class-ban van egy ciklus ami a problémámat okozza:
    int index = 1;
    ArrayList<String> temp = new ArrayList<String>();
    tranzak temptranz = new tranzak(0, temp);
    for (int i = 0; i <= beolv.size()-1; i++) {
    if (beolv.get(i).equals("F")) {
    temptranz.id = index;
    System.out.println(temptranz.id);
    System.out.println(temptranz.term);
    //Idáig minden OK, szépen megkapja az (átmeneti) tranzakció az azonosítóját és a terméklistát
    trs.add(temptranz);
    //Beállítom a változókat a következő tranzakcióhoz
    ind++;
    temptranz.id = 0;
    temptranz.term.clear();
    } else {
    temptranz.addTerm(beolv.get(i));
    }
    }

    //Viszont amikor kiiratnám a végleges tranzakciókat tartalmazó listát már rossz ID-t és üres terméklistát kapok vissza
    for (int i = 0; i <= trs.size()-1; i++) {
    System.out.println(trs.get(i).id);
    System.out.println(trs.get(i).term);
    }

    Itt a temptranz-ba gyűjtögetem az információkat mind addig amíg "F"-et tartalmazó sort nem talál a ciklus. Ha "F"-hez ér, akkor az eddig összegyűlt adatokkal az átmeneti temptranz objektumot egy az egyben hozzáadnám az ArrayListhez ami tranzakcio objektumokat tartalmaz. A probléma ott jön elő, hogy a trs.add(temptranz); sor után kinullázom az ideglenes Stringeket tartalmazó Listát, és valamiért (ezt lehet tudnom kéne :B ) hiába adtam már hozzá az objektumot, kitörli belőle a String lista tartalmát és üresen adja át :U

    Szóval a probléma okára nagyjából rájöttem, közben meg is oldottam Listák nélkül a feladatot, de kíváncsi lennék, hogy mi okozza pontosan, és hogyan kerüljem el a jövőben az ebből adódó hibákat. :B

    Ui.: a sok próbálkozás és ctrl+c / ctrl+v után lehet maradt benne 1-2 fölösleges sor és csúnyán nézhet ki, utólag is bocsi :P

    Huh, ez a kód több sebből is vérzik. Érdekel?

  • RexpecT
    addikt

    Google Drive-ba felraktam kompletten ami kell a feladathoz, és ahol elakadtam.

    Pastebin a fő osztályról.
    Ami még kellhet hozzá a 'tranzakció' osztály (tranzak.java):
    public class tranzak {
    public int id;
    public ArrayList<String> term;

    public tranzak(ArrayList<String> _term) {
    this.term = _term;
    }

    public tranzak(int _id, ArrayList<String> _term) {
    this.id = _id;
    this.term = _term;
    }

    public void getTerm() {
    for (int i = 0; i <= this.term.size()-1; i++) {
    System.out.println(this.term.get(i));
    }
    }

    public void addTerm(String _ujterm) {
    this.term.add(_ujterm);
    }

    }

    Amire rájöttem időközben:
    Main.class-ban van egy ciklus ami a problémámat okozza:
    int index = 1;
    ArrayList<String> temp = new ArrayList<String>();
    tranzak temptranz = new tranzak(0, temp);
    for (int i = 0; i <= beolv.size()-1; i++) {
    if (beolv.get(i).equals("F")) {
    temptranz.id = index;
    System.out.println(temptranz.id);
    System.out.println(temptranz.term);
    //Idáig minden OK, szépen megkapja az (átmeneti) tranzakció az azonosítóját és a terméklistát
    trs.add(temptranz);
    //Beállítom a változókat a következő tranzakcióhoz
    ind++;
    temptranz.id = 0;
    temptranz.term.clear();
    } else {
    temptranz.addTerm(beolv.get(i));
    }
    }

    //Viszont amikor kiiratnám a végleges tranzakciókat tartalmazó listát már rossz ID-t és üres terméklistát kapok vissza
    for (int i = 0; i <= trs.size()-1; i++) {
    System.out.println(trs.get(i).id);
    System.out.println(trs.get(i).term);
    }

    Itt a temptranz-ba gyűjtögetem az információkat mind addig amíg "F"-et tartalmazó sort nem talál a ciklus. Ha "F"-hez ér, akkor az eddig összegyűlt adatokkal az átmeneti temptranz objektumot egy az egyben hozzáadnám az ArrayListhez ami tranzakcio objektumokat tartalmaz. A probléma ott jön elő, hogy a trs.add(temptranz); sor után kinullázom az ideglenes Stringeket tartalmazó Listát, és valamiért (ezt lehet tudnom kéne :B ) hiába adtam már hozzá az objektumot, kitörli belőle a String lista tartalmát és üresen adja át :U

    Szóval a probléma okára nagyjából rájöttem, közben meg is oldottam Listák nélkül a feladatot, de kíváncsi lennék, hogy mi okozza pontosan, és hogyan kerüljem el a jövőben az ebből adódó hibákat. :B

    Ui.: a sok próbálkozás és ctrl+c / ctrl+v után lehet maradt benne 1-2 fölösleges sor és csúnyán nézhet ki, utólag is bocsi :P

    Felülírod az objektum értékeit ebben a két sorban:

    temptranz.id = 0;
    temptranz.term.clear();

    Ezután se lesz még jó, mert egyszer hoztad csak létre a temptranz objektumot.

    Ezt olvasd át.

  • RexpecT
    addikt

    Sziasztok!

    Egy érettségi feladattal van problémám. Eddig mindegyik feladatot megoldottam valamilyen úton-módon, viszont most valamiért nem akar működni az ArrayList úgy ahogy én szeretném :P

    Valakinek elküldhetném privátban? (Pár sor lenne az egész, valószínűleg valami bagatell hibát vétettem, viszont több fájlban vannak a dolgok, nem akarom teleszemetelni a topikot :B )

    Rakd fel pl. pastebin-re a kódot, így más is tanulhat a hibából. :)

  • Lortech
    addikt

    Üdv!

    Nem tudom megoldható-e, de valami olyasmire lenne szükségem, hogy egy byte/integer váltózó értéke mindig 0 és 9 között maradjon műveletek után. Pl.: value %= 10 megakadályozza, hogy 9 fölé menjen az értéke, value++ esetén 0-ra ugrik az értéke.
    Na nekem ennek az ellenkezőjére is szükségem lenne, (ha létezik ilyen) hogy (ha value = 0) value-- után 9 értéket vegyen fel.

    (Egy olyan programról van szó ami képeket mutat végig 0-tól 9-ig sorszámozva, egy előre és egy vissza gombbal lehet léptetni őket, az előre működik)

    Kezdő vagyok, nem tudom hogy lehet a legegyszerűbben megoldani ilyen feladatot. :B

    x = (x + n) % n ?
    itt n = 10, x-et lépteted, és x értékét a fenti képlettel számolod ki.

  • skoda12
    aktív tag

    Üdv!

    Egy aprócska problémám akadt JFrame/JPanel-el kapcsolatban. :(((

    Adott egy JFrame, egy JPanellel. A program futása során ha szükséges hozzá ad képet tartalmazó JLabeleket a panelhez.

    A probléma csak az, hogy ezek a labelek csak akkor jelennek meg ténylegesen, ha az ablakot akár egy pixellel is nagyítom vagy kicsinyítem. :Y

    Frame: Null layout
    Panel: az összeset kipróbáltam, egyikkel se jó, de igazából csak a flow layout jo nekem, ami szépen egymás után pakolja a képeket (labeleket)

    Valami tipp? :F :R

    Swing UI anomáliák akkor fordulnak elő többnyire, ha nem a UI threaden piszkálod a komponenseket.

  • Sirpi
    senior tag

    Üdv!

    Javaban egy akasztófa játékot kell csinálnom.

    A program nagy része kész, már csak a kép megjelenítése hiányzik, amit én előre elkészített .jpg képekkel oldanék meg, (6 db van) amit a hibázások száma alapján cserélgetek.
    Csináltam egy metódust, ami minden karakter megnyomás után lefut, és beállítja a képet a hibák alapján, így néz ki:
    public Icon faimg(int hiba) {
    ImageIcon kep = new ImageIcon();
    String elut = " ";
    switch (hiba) {
    case 0: kep = new ImageIcon("G:\\Netbeans\\Java\\akasztofa\\img\\af_0.jpg"); break;
    case 1: kep = new ImageIcon("G:\\Netbeans\\Java\\akasztofa\\img\\af_1.jpg"); break;
    case 2: kep = new ImageIcon("af_2.jpg"); break;
    case 3: kep = new ImageIcon("af_3.jpg"); break;
    case 4: kep = new ImageIcon("af_4.jpg"); break;
    case 5: kep = new ImageIcon("af_5.jpg"); break;
    case 6: kep = new ImageIcon("af_6.jpg"); break;
    }

    (Próbáltam direkt kétféleképpen is, de egyikkel se megy a dolog)

    Ezt lefuttatom minden gombnyomás után:
    kep = muvelet.faimg(hiba);
    keplabel.setIcon(kep);

    Nem akarja megjeleníteni a képet, nem tudom mit rontok el :F
    System.out.println-el is megnéztem, a kep megkapja az értéket (elérési utat), de amint lefut, az eredeti fehér kép helyén a keplabel-en semmi nem lesz, a fehér kép is eltünik. :F

    Ha szükséges a forráskódot is meg tudom mutatni.

    Ha mág megoldódott, egy kis optimalizáció:
    A switch helyett elég ennyi:

    kep = new ImageIcon("af_" + hiba + ".jpg");

  • disy68
    aktív tag

    Üdv!

    Javaban egy akasztófa játékot kell csinálnom.

    A program nagy része kész, már csak a kép megjelenítése hiányzik, amit én előre elkészített .jpg képekkel oldanék meg, (6 db van) amit a hibázások száma alapján cserélgetek.
    Csináltam egy metódust, ami minden karakter megnyomás után lefut, és beállítja a képet a hibák alapján, így néz ki:
    public Icon faimg(int hiba) {
    ImageIcon kep = new ImageIcon();
    String elut = " ";
    switch (hiba) {
    case 0: kep = new ImageIcon("G:\\Netbeans\\Java\\akasztofa\\img\\af_0.jpg"); break;
    case 1: kep = new ImageIcon("G:\\Netbeans\\Java\\akasztofa\\img\\af_1.jpg"); break;
    case 2: kep = new ImageIcon("af_2.jpg"); break;
    case 3: kep = new ImageIcon("af_3.jpg"); break;
    case 4: kep = new ImageIcon("af_4.jpg"); break;
    case 5: kep = new ImageIcon("af_5.jpg"); break;
    case 6: kep = new ImageIcon("af_6.jpg"); break;
    }

    (Próbáltam direkt kétféleképpen is, de egyikkel se megy a dolog)

    Ezt lefuttatom minden gombnyomás után:
    kep = muvelet.faimg(hiba);
    keplabel.setIcon(kep);

    Nem akarja megjeleníteni a képet, nem tudom mit rontok el :F
    System.out.println-el is megnéztem, a kep megkapja az értéket (elérési utat), de amint lefut, az eredeti fehér kép helyén a keplabel-en semmi nem lesz, a fehér kép is eltünik. :F

    Ha szükséges a forráskódot is meg tudom mutatni.

    Ennyiből ugyan nem látszik mi a hiba, de szerintem az elérési utakkal lehet gond.

    Csináltam egy kis minta projectet (maven project), két "kép cserélővel", az egyik a resource mappából szedi a képeket, a másik pedig külső könyvtárból.

    Ha nincs jól megadva az elérési út a jelenség az általad is leírttal egyezik. Annyit még változtattam, hogy egységesen kezeljem a két változatot, hogy az ImageIcon-t java.net.URL paraméterrel példányosítom.

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

Hirdetés