Thread Problem

Status
Nicht offen für weitere Antworten.

dR.LoL

Bekanntes Mitglied
Hallo,
Implementiere grad ein weiteres Snake, das stonedSnake ^^
Jetzt hab ich allerdings Probleme mit dem Thread.
die Klasse daSnake mach ich implements runnable!
Danach hab ich ua. folgende Klassen.
Code:
public void run()
  {
    try 
    {
      th.sleep(getSleep());
    }
    catch (InterruptedException ex)
    {
      //John Wayne interested...
    }
    moveSnake();
  }

die Methode run(), wurd die ganze Zeit durchlaufen...oder? (Hab son Tut gelesen, bitte sonnst korrigieren!)
Deshalb soll ja try-catch mittels sleep implementiert werden.
Wenn ich das so mache, wie oben beim Code, habe ich eine Endlose schleife und das ganze GUI kackt ab.

Wie muss ich sowas korrekt implementieren?
getSleep ist beim Spielstart MINDESTENS 1000MS, diese Zeit warte ich allerdings ab!

Danke, Gruss vom LoL
 
G

Gast

Gast
die Operation sieht so schon ziemlich korrekt aus,
was ist deine Frage?
wenn du dem sleep nicht vertraust dann manch doch vorher und nachher eine Ausgabe der Systemzeit, evtl. bei Fehlermeldung auch eine Ausgabe

----------

eine Endlosschleife wird übrigends nicht kommen sondern die run-Operation einmal duchlaufen und fertig!

da fehlt dann noch
while(true) {
} drumherum zur Wiederholung

-----------

um einen Thread zu starten genügt übrigends nicht einfach die run-Operation auszuführen, falls du dies tust,
wenn du das von der GUI aus machst wird dehalb vielleicht die GUI schlafengelegt?!

richtig:
Runnable r = ...;
new Thread(r)start();
 

Leroy42

Top Contributor
dR.LoL hat gesagt.:
die Methode run(), wurd die ganze Zeit durchlaufen...oder?

Nein! Sie wird nur einmal durchlaufen (initiiert durch Aufruf von start()).
Wenn du eine Schleife möchtest, mußt du diese schon selbst einbauen.

Darum verstehe ich auch nicht, wo da jetzt eine Endlosschleife entstehen soll :shock:

Kannst du ein paar System.out.println's einbauen um rauszubekommen, wann
der Interpreter welche Methode abarbeitet?
 

dR.LoL

Bekanntes Mitglied
Stimmt. Habe nun auch gesehen, dass ich die while(true) nicht mehr drin gehabt habe, da ich genau mit dem am rumtesten/spielen war.
Sorry!

Allerdings weshalb kommt, wenn ich...
Code:
  public void run()
  {
    //...OHNE DIE WHILE(TRUE) =>Somit also 1 Durchlauf!...
      try
      {
        System.out.println("bla");
        th.sleep(getSleep());
        System.out.println("CR=");
      }
      catch (InterruptedException e1)
      {
        //John Wayne interested...
      }
      moveSnake();
  }
...mache dieses Ergebnis raus:
bla
bla
CR=
CR=
und nicht dieses:
bla
CR=

???

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Die moveSnake siehst so aus:
Code:
  public void moveSnake()
  {
    int xTmp,yTmp;
    Vector sSTemp = stonedSnake;
    Enumeration e = this.stonedSnake.elements();
    while (e.hasMoreElements())
    {
      cr = (ColorRectangle)e.nextElement();
      xTmp = cr.x;
      yTmp = cr.y;
      //Check the movment...
      if (Movin == MovinUp)
        yTmp = cr.y - SIZERECT;
      if (Movin == MovinDown)
        yTmp = cr.y + SIZERECT;
      if (Movin == MovinLeft)
        xTmp = cr.x - SIZERECT;
      if (Movin == MovinRight)
        xTmp = cr.x + SIZERECT;
      //and its playing field...
      if (xTmp < 1)
        xTmp = maxX;
      else if (xTmp + cr.width > maxX)
        xTmp = 1;
      else if (yTmp < 1)
        yTmp = maxY;
      else if (yTmp + cr.height > maxY)
        yTmp = 1;
      //and set this position new!
      cr.x = xTmp;
      cr.y = yTmp;
      sSTemp.addElement(cr);
    }
    stonedSnake = sSTemp;
    sSControl.viewSnake.pnlLeft.repaint();
  }

War Mittagessen und nun kommt nach diesem Durchlauf (MIT EINER WHILE) diese Meldung:
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
Exception in thread "Thread-2" java.lang.OutOfMemoryError: Java heap space
Sieht jemand, weshalb die JavaDatei ständig wächst? (RAM)

Hier noch der gewisse Paint GUI Part:
Code:
pnlLeft = new JComponent() 
    { 
      public void paintComponent(Graphics g) 
      {
        g.setColor(Color.BLACK);
        g.drawRect(0,0,400,400);
        try
        {
          if (null != sSControl.Snake.stonedSnake)
          {
            Enumeration e = sSControl.Snake.stonedSnake.elements();
            while (e.hasMoreElements())
            {
              ColorRectangle cr = (ColorRectangle)e.nextElement();
              g.setColor(cr.color);
              g.fillRect(cr.x, cr.y, cr.width, cr.height);
            }
          }
        }
        catch (NullPointerException ex)
        {
          //John Wayne interested...
        }
      } 
    };


Vielen Dank euch beiden, Gruss vom LoL
 

Leroy42

Top Contributor
In deinem gepostetem Code sehe ich nichts was dieses Verhalten erklären könnte :shock:

Ich kann mir nur vorstellen, daß du mehrfach (vielleicht sogar in einer Endlosschleife)
Threads erzeugst. Darauf deutet auch die doppelte "blah"-Ausgabe hin.

Was ist eigentlich th in th.sleep()? Ist th überhaupt derselbe Thread in dem deine
run()-Methode läuft? Und wenn du mehrere Threads erzeugst, ist dann th immer
etwas anderes?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
A Problem mit Thread.sleep Java Basics - Anfänger-Themen 4
B Thread Problem Java Basics - Anfänger-Themen 7
G problem mit thread.sleep() Java Basics - Anfänger-Themen 6
T Problem mit Eclipse? Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 4
M Threads Thread.Sleep Problem im Zusammenhang mit GUI/ActionPerformed-Methode Java Basics - Anfänger-Themen 4
H Threads Problem bei Thread + Innere Klasse Java Basics - Anfänger-Themen 3
F thread problem Java Basics - Anfänger-Themen 3
D Problem mit interrupt() thread Java Basics - Anfänger-Themen 4
G Problem Thread und Monitoring Java Basics - Anfänger-Themen 3
P Problem beim Thread Java Basics - Anfänger-Themen 20
kulturfenster Problem mit Thread + Interface Java Basics - Anfänger-Themen 4
S problem mit repaint() in Thread Java Basics - Anfänger-Themen 6
M Thread - Problem Java Basics - Anfänger-Themen 3
A Problem zweitem Thread in Applet Java Basics - Anfänger-Themen 12
G Problem mit Thread Sleep! Java Basics - Anfänger-Themen 3
G Problem mit Thread Java Basics - Anfänger-Themen 6
G Thread-Problem, glaube ich? Java Basics - Anfänger-Themen 5
G Thread Problem Java Basics - Anfänger-Themen 13
A Do/While Problem (Exception in thread "main" java. Java Basics - Anfänger-Themen 4
G Thread Problem Java Basics - Anfänger-Themen 2
P Problem mit Thread - cannot be referenced from a static cont Java Basics - Anfänger-Themen 5
H Problem mit einem Programmversuch (geteilter Thread) Java Basics - Anfänger-Themen 3
N Thread Problem. Java Basics - Anfänger-Themen 6
E Anfänger Problem mit Thread.sleep() Java Basics - Anfänger-Themen 11
D Thread und JOptionPane -> Problem Java Basics - Anfänger-Themen 6
K Problem beim Einbau von einem Thread in eine Gui Java Basics - Anfänger-Themen 9
K animation in applet, thread problem (?) Java Basics - Anfänger-Themen 3
G Problem bei Thread im Frame Java Basics - Anfänger-Themen 3
G Problem mit Thread Java Basics - Anfänger-Themen 2
G Thread-Problem Java Basics - Anfänger-Themen 2
D Vorschläge für Umstellung auf Thread-Nutzung erwünscht Java Basics - Anfänger-Themen 7
Z Sikuli Thread Fehler Java Basics - Anfänger-Themen 3
Leyla Thread isInterrupt Java Basics - Anfänger-Themen 18
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
A Thread XML-Dateien zusammenfügen Java Basics - Anfänger-Themen 11
F influxdb Upload in eigenem Thread Java Basics - Anfänger-Themen 2
frager2345 Thread - Methoden synchronized deklarieren Java Basics - Anfänger-Themen 10
berserkerdq2 Größter unterschied von extends thread und implements runnable? Java Basics - Anfänger-Themen 2
T Thread beenden aus zweiter Klasse Java Basics - Anfänger-Themen 4
A Thread - Synchronized Java Basics - Anfänger-Themen 10
A Thread Producer - Consumer Java Basics - Anfänger-Themen 1
A Thread-Semhapore Java Basics - Anfänger-Themen 0
A Thread Exchanger Java Basics - Anfänger-Themen 22
A Thread-Cyclicbarrier Java Basics - Anfänger-Themen 4
B In einem Thread Endlosschleife beenden Java Basics - Anfänger-Themen 19
A Thread-Verklemmung Java Basics - Anfänger-Themen 10
A Thread find number Java Basics - Anfänger-Themen 8
F Thread.sleep() Java Basics - Anfänger-Themen 5
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
A Thread Java Basics - Anfänger-Themen 3
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
A Thread Java Basics - Anfänger-Themen 8
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
M Thread-Zustände Java Basics - Anfänger-Themen 6
CptK For-Schleife in Thread nach jedem Durchlauf pausieren Java Basics - Anfänger-Themen 35
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
B Endlosschleife Thread sauber beenden Java Basics - Anfänger-Themen 19
D Java Thread wartet nur ein mal Java Basics - Anfänger-Themen 1
D Java Thread wartet nur ein mal Java Basics - Anfänger-Themen 0
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
C Thread und TimerTask, Verstädnisproblem Java Basics - Anfänger-Themen 10
amgadalghabra Sorting Thread Launcher Java Basics - Anfänger-Themen 3
B Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
A Thread Java Basics - Anfänger-Themen 4
A Thread Java Basics - Anfänger-Themen 1
A Thread Java Basics - Anfänger-Themen 0
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 1
B Thread / Prozess stoppen? Java Basics - Anfänger-Themen 22
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
B Threads Thread sleep() Method einfache Frage Java Basics - Anfänger-Themen 8
W Thread Aufgabe - Vorgehensweise Java Basics - Anfänger-Themen 8
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 0
J Threads PrograssBar update während thread Java Basics - Anfänger-Themen 13
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
Spencer Reid JavaFX Memory Thread.sleep Java Basics - Anfänger-Themen 1
S Thread.sleep mit JProgressBar Java Basics - Anfänger-Themen 1
ralfb1105 Frage zu Thread Synchronisation mit wait() und notify() Java Basics - Anfänger-Themen 3
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
J JavaFX -> SocketIO -> Thread -> Update Label Java Basics - Anfänger-Themen 13
J Thread Handling Java Basics - Anfänger-Themen 9
C Thread in Methode + raus aus der Schleife Java Basics - Anfänger-Themen 10
E Threads Thread in While-Schleife nur einmal starten Java Basics - Anfänger-Themen 2
F Daten von Thread an den aufrufenden zurückgeben Java Basics - Anfänger-Themen 22
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
N KeyListener in Thread Java Basics - Anfänger-Themen 0
M Thread.sleep() Funktion Java Basics - Anfänger-Themen 1
W JLabel in Main aus Thread verändern. Java Basics - Anfänger-Themen 4
D Ausgeben welcher Thread gerade Arbeitet Java Basics - Anfänger-Themen 8
N Threads Thread-Fehler Java Basics - Anfänger-Themen 2
F Thread um Uhrzeit ausführen Java Basics - Anfänger-Themen 5
F Get/Post als eigener Thread mit Rückgabe Java Basics - Anfänger-Themen 5
J Exception in thread "main" Java Basics - Anfänger-Themen 1
F Thread der auf eine Queue wartet, sicher beenden Java Basics - Anfänger-Themen 4
B Animation mit Thread(s) Java Basics - Anfänger-Themen 23
I Thread.sleep (1000); Java Basics - Anfänger-Themen 1
M Threads Jede Klasse einem Thread zuweisen Java Basics - Anfänger-Themen 7
J Java Thread cancel() und wiederbeleben Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben