Hirdetés

Keresés

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

  • Murphistic

    aktív tag

    válasz gaben #2376 üzenetére

    Megint próbálkoztam egy kicsit. Sajnos most olyan hibával találkoztam, hogy ugyan szépen frissíti a képet a kód ( az is, amit elsőnek írtál ), de a végén, amikor kilép a ciklusból eltűnik a kiírt szöveg. Mintha ezt a Java update hívásai okoznák, sajnos a megoldásra még nem jöttem rá.

    Viszont ha csak egy számláló kiírása a cél, akkor szerintem egyszerűbb egy JLabel-t használni erre a célra, amit pl. NetBeansben is vagy saját prancsokkal testre szabsz ( háttérszín, betűméret, betű színe, típusa )

    Csináltam egy osztályt, aminek a konstruktorában beállítod, hogy melyik JLabel számoljon és utána meghívod a start-ot.

    class IdoThread extends Thread{
    JLabel label;
    public IdoThread(JLabel label)
    {
    this.label=label;
    }
    public void run(){
    int ido=0;
    while(ido<5){

    label.setText(""+ido);
    label.update(label.getGraphics());
    try{
    Thread.sleep(1000);
    }catch(InterruptedException ie){
    ie.printStackTrace();
    }
    ido++;

    }
    }
    }

    Valahol a programkódban, ahol szükséged van a számláló elindítására ( pl. egy gombra kattintva ) beszúrod ezt:

    IdoThread it=new IdoThread(jLabel1);
    it.start();

    Ennek még az is az előnye, hogy nem blokkolja az alkalmazásod felületét, tehát a számláló akkor is megy, ha mondjuk gépelsz a programodban, vagy így használható lesz egy másik gomb is, ami mondjuk a számláló leállítására szolgál.

    Úgy néz ki, hogy a tegnap esti megoldásom egy elég nagy katyvasz lett :D és nem valószínű, hogy működni is fog.

    Nem tudom, hogy ennyi megoldja-e a problémádat, mert az tényleg furcsa, hogy nem akar működni a kirajzolás a Graphics-on.

  • Murphistic

    aktív tag

    válasz gaben #2376 üzenetére

    Hmmm.

    Most olyasmi jutott még eszembe, hogy az update() hívása nem-e egy másik szálban fut le, ami az aktuális szál lesz és emiatt a sleep dob egy kivételt és emiatt a vibrálás.

    Esetleg ki lehetne próbálni az updatet egy külön szálonmeghívni, így nem az lenne az aktuális.

    Akkor megpróbálnám így: ( az updatet egy külön szálban hívnám meg )

    //Egy külön osztály az update meghívására
    class UThread extends Thread{
    Graphics g;
    JFrame jf; //nem tudom hogy JFrame-e a super típusa a mintádban
    public UThread( Graphics g, JFrame jf )
    {
    this.g=g;
    this.jf=jf;
    }
    public void run(){
    jf.update(g);
    }
    }

    ido++;
    nap.setText(""+ido);
    g.drawString(nap.getText(),10,90);

    UThread ut=new UThread(g, super);
    ut.start(); //meghívjuk az updatet
    try{
    Thread.sleep(1000);
    }catch(InterruptedException ie){
    is.printStackTrace(); //kiírjuk az esetleges hibainformációt
    }

    Remélem nem írtam el semmit, most sajnos nincs alkalmam a kód ellenőrzésére.

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