Problem mit TimerTask

  • Themenstarter Themenstarter flo
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
F

flo

Gast
Hallo
Möchte gerne einen Timer benutzen
Lege dafür einen Timer und einen TimerTask an.

Code:
Timer     timer = new Timer();
MyTask    task = new MyTask();

In der mainfunktion der GuiServer Klasse initialisiere ich den guiserver
Code:
guiserver mainframe =new guiserver();

Dabei wird dann der Timer gestartet

Code:
timer.schedule( task, 0,10000 );

Soweit alles ok!
In der Timerfunktion möchte ich jetzt gerne auf eine Methode und variablen des guiservers zugreifen.
Aber WIE???

Code:
class MyTask extends TimerTask {
     public void run() {
         mainframe.serverStart();  //So gehts leider nicht
     }
}

Also nochmal kurz. Ich möchte von der Inneren Timer Klasse auf die Methoden der externen Klasse zugreifen
Vielen dank
mfg flo
 
entweder änderst du MyTask um und gibts im Konstruktor einen Parameter mit (beispiel die andere Klasse)
Code:
Task = new MyTask(otherClass);
//...
class MyTask extends TimerTask {
OhterClass myCl = null;
public MyTask(OtherClass cl)
{ 
    myCl = cl;
}
oder in
Code:
public void run()
{
    MeineAndereKlasse.funktionen(); //müssen aber static sein!
}

oder du machst ne anonyme Klasse
Code:
Timer timer = new Timer();
timer.schedule( new TimerTask() {
public void run()
{
//methoden aufruf
}
}
,0,10000 );
Also würde ich dir das 1te oder das 3te empfehlen 😉
 
Hallo
Habe Version 3 Versucht! Geht aber leider nicht so richtig.

Code:
   public static void main (String[] args) throws SQLException , FileNotFoundException, IOException 
    {
       guiserver mainframe =new guiserver();    
   }

So ist aber wenn ich das richtig seh das mainfraim nicht global und ich kann dann auch nicht in der Privaten Timer Klasse auf mainframe.serverstart() zugreifen.
Wie muss ich das machen
Vielen dank noch mal
mfg flo
 
wenn du im konstruktor weiterarbeitest, ist das mainframe objekt = this 😉
und so kannst weiterarbeiten 🙂
 
Hallo
Habe noch ein Problem mit dem TimerTask.
Habe das jetzt so gelöst:

Code:
public class guiserver {
    Timer timer = new Timer(); 
    public int gestartet=0;
  
    Connection conn;
    WebServer conserver;
    int countVersuche=0;
    int versuche=0;
    TimerTask starttime = new TimerTask() {
        public void run()  { 
            if (countVersuche<versuche) {
                if(gestartet==0){
                    countVersuche=countVersuce+1	
                    this.serverStart();
                }
                else{
                    System.out.println("Server läuft");
                    starttime.cancel();
                }
            }
            else{
                starttime.cancel();
                System.out.println("Server Konnte nicht gestartet werden\n");
            }
        }
    };
}

Leider bekomme ich aber manchmal (nicht immer) willkürlich den Fehler

java.lang.NullPointerException
at guiserver.serverStart(guiserver.java:145)
at guiserver$1.run(guiserver.java:36)
at java.util.TimerThread.mainLoop(Unknown Sou
at java.util.TimerThread.run(Unknown Source)

Kann mir da jemand helfen?
vielen dank
mfg flo
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben