repaint während Thread läuft

poochie89

Mitglied
Hallo, ich habe ein Problem mit einer Aufgabe, es geht im groben darum ein (simples) billardspiel zu programmieren, dazu habe ich ein JPanel Tisch welches das ganze zeug zeichnet, diese klasse besitzt ein objekt der klasse Ball. Ball implementiert Runnable und führt die bewegung des balles in der run()-methode aus (ändert dessen position forlaufend). Wenn ich nun das ganze ausführe dann seh ich nur wo sich der ball zu beginn und zu ende befindet. Wo mache ich hier was falsch, muss ich da den thread kurz anhalten weil es sonst zu schnell geht?!
Danke schonmal für die Hilfe.


Java:
Thread t = new Thread(this.ball);

t.start();

while(t.isAlive()){
this.repaint();
}
 
S

SlaterB

Gast
wieso führst du die Bewegung des Balls in einem Thread aus und nicht einfach direkt in einer Schleife dort wo du gerade bist?

edit:
ok, damit nebenher repaint aufgerufen werden kann, meine pädagogische Frage bringt nix,

also es ist so: solange die Methode, die den Thread startet (ActionListener?), nicht beendet wird, wird nichts neu gezeichnet, die GUI ist blockiert,
die repaint-Aufrufe müssen entweder in den ersten Thread rein, an geeignete Stellen,
oder du brauchst einen zweiten Thread, der den ersten beobachtet, und repaint() aufruft,

aber besser nicht so wie bisher, millionenfach pro Sekunde, setze in die Schleife noch ein Thread.sleep(30) ein, um 30 ms zu warten
 
Zuletzt bearbeitet von einem Moderator:

poochie89

Mitglied
also wir sollten den ball als runnable implementieren, stand so in der angabe, fand das auch nicht schön dass der ball seine bewegung ausführt.... hoffe ich hab dich richtig verstanden.
 

poochie89

Mitglied
jetzt ist mir schon einiges klarer, das ist also die schuld von repaint(), hab eben auch versucht nen string auszugeben in der schleife und der ist öfters ausgegeben worden.
hab jetzt nen 2ten thread erstellt mit repaint in der run-Methode. aber so funktionierts noch nicht, gleicher effekt wie vorher.hab leider mit threads nur ganz wenig gearbeitet bisher des wegen tue ich mich sehr schwer
und danke für die hilfe.


Java:
      Runnable r = new Runnable() {
	 public void run() {
	 PoolTable.this.repaint();
	}
	};
		    	    
	Thread ballThread = new Thread(this.ball);
	Thread guiThread = new Thread(r);
			      
	 ballThread.start();
	 guiThread.start();


          while(ballThread.isAlive()&&won==false){
		    		 
		    		  
		    		  try {
						ballThread.sleep(30);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
 
S

SlaterB

Gast
du hast nach wie vor eine Schleife beim Aufrufer, nach wie vor kann dieser nicht fertig werden und solange passiert gar nix anderes,
so wirds in etwa was:

Java:
    final Thread ballThread = new Thread(this.ball);
     ballThread.start();

    Runnable r = new Runnable() {
     public void run() {

          while(ballThread.isAlive()){
                    try {
                        ballThread.sleep(30);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    PoolTable.this.repaint();
          }
      } };                    
     Thread guiThread = new Thread(r);
     guiThread.start();
     // Aufrufer ist hier fertig, Threads können solange laufen wie sie lustig sind
 

poochie89

Mitglied
ok, also ich muss vom repaint()-Thread den anderen schlafen legen, weil sonst einfach die schleife abgearbeitet wird ohne dass sie ineinander greiden oder? leider hat dein lösungsvorschlag noch nicht geklappt, immer noch gleicher effekt.
 
S

SlaterB

Gast
was genau wie schnell ist kann ich an dem Code nicht beurteilen, baue in alle Threads an interessante Stellen System.out.println-Ausgaben ein,
verwende Thread.sleep() um alles beliebig langsam zu machen

wenn der Ball schneller als in 1 sec fertig ist, dann kann es generell möglich sein dass du wenig Zwischenschritte siehst,
unabhängig von den Änderungen hier

mehr Code könnte helfen, ansonsten kann ich nix neues mehr beitragen
 

poochie89

Mitglied
kann es sein dass der ballthread einfach viel zu schnell fertig ist?!?!
ich habe jetzt mal in dessen run-methode ein Thread.sleep eingebaut und jetzt sieht ganz gut aus, der ball läuft relativ flüssig..
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Kein Repaint während eines Prozesses. AWT, Swing, JavaFX & SWT 5
D Repaint Funktioniert nicht AWT, Swing, JavaFX & SWT 2
D JUNG Repaint function does not work AWT, Swing, JavaFX & SWT 2
E repaint Probleme AWT, Swing, JavaFX & SWT 13
G listener repaint() - verschiedene Darstellung AWT, Swing, JavaFX & SWT 24
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
J actionperformed wird nicht aufgerufen/ repaint() AWT, Swing, JavaFX & SWT 6
L Swing repaint() ruft paintComponent(g1d) nicht auf AWT, Swing, JavaFX & SWT 12
G Repaint wird nicht durchgeführt AWT, Swing, JavaFX & SWT 8
I Swing Verhindern, dass repaint() kaskadiert AWT, Swing, JavaFX & SWT 6
ms_cikar Update swingUtilities Repaint in der Schleife AWT, Swing, JavaFX & SWT 3
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
N Swing JButtons werden nach repaint() doppelt dargestellt AWT, Swing, JavaFX & SWT 12
K Methode repaint() AWT, Swing, JavaFX & SWT 1
B Swing Wann brauche ich repaint() ? AWT, Swing, JavaFX & SWT 1
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
A repaint(); AWT, Swing, JavaFX & SWT 9
J Swing ungewünschter Nebeneffekt bei der repaint() Methode AWT, Swing, JavaFX & SWT 3
A Problem: repaint() - Schleife AWT, Swing, JavaFX & SWT 3
S 2D-Grafik repaint()-Aufruf. Und nichts geschieht. AWT, Swing, JavaFX & SWT 5
Joew0815 JDialog repaint() funktioniert nicht wie gewünscht. AWT, Swing, JavaFX & SWT 2
P JPanel und Repaint AWT, Swing, JavaFX & SWT 5
J JavaFX Automatisches Neuzeichnen ("Repaint") abstellen. AWT, Swing, JavaFX & SWT 10
F JTable Repaint Issue AWT, Swing, JavaFX & SWT 1
N Observer: update ruft nicht repaint auf AWT, Swing, JavaFX & SWT 0
C Repaint() funktioniert nicht in TabbedPanel AWT, Swing, JavaFX & SWT 5
S JList repaint AWT, Swing, JavaFX & SWT 1
L NullpointerException und Probleme mit repaint() AWT, Swing, JavaFX & SWT 11
M Repaint mittels Button richtig aufrufen klappt nicht AWT, Swing, JavaFX & SWT 1
B Repaint auf JFrame, JLabel und ImageIcon AWT, Swing, JavaFX & SWT 4
K 2D-Grafik Paint - Wie binde ich repaint ein? AWT, Swing, JavaFX & SWT 8
D repaint() klappt anders als vorgestellt AWT, Swing, JavaFX & SWT 15
R Repaint() in Schleifen, Threads AWT, Swing, JavaFX & SWT 13
B Swing Repaint Problem - mal wieder AWT, Swing, JavaFX & SWT 5
P 2D-Grafik Gezielter Repaint einzelner Frames in Java-Game AWT, Swing, JavaFX & SWT 6
javampir Bei repaint nix los AWT, Swing, JavaFX & SWT 2
B Swing repaint() AWT, Swing, JavaFX & SWT 3
Ernesto95 AnimationLoop - Problem bei Aufruf von repaint AWT, Swing, JavaFX & SWT 6
P 2D-Grafik repaint(); steigender RAM Verbauch AWT, Swing, JavaFX & SWT 6
Y KeyListener, GUI Thread, repaint AWT, Swing, JavaFX & SWT 7
S Applet Repaint AWT, Swing, JavaFX & SWT 3
M Programm hängt sich auf nachdem repaint() benutzt wurde AWT, Swing, JavaFX & SWT 2
R Swing Grafikfehler bei repaint AWT, Swing, JavaFX & SWT 2
N repaint() blockieren AWT, Swing, JavaFX & SWT 6
K canvas zeig nach repaint nichts an AWT, Swing, JavaFX & SWT 8
M Repaint() AWT, Swing, JavaFX & SWT 14
J Swing repaint, repaint, repaint AWT, Swing, JavaFX & SWT 8
M Applet repaint() verlangsamen AWT, Swing, JavaFX & SWT 7
R paintComponent malt bei repaint() Rahmen um Panel AWT, Swing, JavaFX & SWT 7
P EDT Problem? Kein Aufruf der repaint Methode AWT, Swing, JavaFX & SWT 6
V Applet JApplet Flackern durch Repaint AWT, Swing, JavaFX & SWT 11
kodela Problem mit repaint() AWT, Swing, JavaFX & SWT 3
N Swing Funktion repaint() updated nicht AWT, Swing, JavaFX & SWT 5
F repaint reagiert nicht AWT, Swing, JavaFX & SWT 8
S AWT Probleme mit repaint() AWT, Swing, JavaFX & SWT 2
D Repaint()? Oder was??? AWT, Swing, JavaFX & SWT 5
M Eine nicht korrekte Darstellung bei repaint() warum? AWT, Swing, JavaFX & SWT 4
T 2D-Grafik Kreis "von Hand" zeichnen -> jedesmal repaint()? AWT, Swing, JavaFX & SWT 6
R validate(), repaint funktionieren nicht! AWT, Swing, JavaFX & SWT 7
B AWT Canvas überdeckt nach repaint() JComboBox-Optionen AWT, Swing, JavaFX & SWT 2
B Swing verschachteltes GUI: repaint() ändert mehr als nur gewünschte Component AWT, Swing, JavaFX & SWT 4
S validate(), invalidate(), repaint(),... Was kommt wann? AWT, Swing, JavaFX & SWT 5
M 2D-Grafik repaint() löscht altes Bild nicht AWT, Swing, JavaFX & SWT 2
J repaint() nicht richtig? AWT, Swing, JavaFX & SWT 6
R repaint erzwingen AWT, Swing, JavaFX & SWT 3
Zettelkasten repaint() von anderen Klassen aufrufen AWT, Swing, JavaFX & SWT 4
H repaint()-Problem - 50% CPU-Auslastung AWT, Swing, JavaFX & SWT 4
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
N Swing MainWindow(JFrame) aktualisieren(neuzeichnen) repaint AWT, Swing, JavaFX & SWT 4
T repaint() Problem AWT, Swing, JavaFX & SWT 2
A 2D-Grafik Repaint - Alternative? AWT, Swing, JavaFX & SWT 3
C JLabel, JTextArea, JScrollPane. repaint(); ? AWT, Swing, JavaFX & SWT 6
N Swing repaint() funktioniert nicht AWT, Swing, JavaFX & SWT 5
T Swing repaint funktioniert nur manchmal? AWT, Swing, JavaFX & SWT 6
K Jpanel repaint problem (Fullscreen) AWT, Swing, JavaFX & SWT 5
V Swing Bei repaint() tut sich nichts AWT, Swing, JavaFX & SWT 7
G ColorReader, bei Fadenkreuz zeichnen mit repaint() flackern AWT, Swing, JavaFX & SWT 19
I Canvas Repaint Probleme AWT, Swing, JavaFX & SWT 2
D Swing Actionlistener verhindert repaint?! AWT, Swing, JavaFX & SWT 2
S JLabel repaint AWT, Swing, JavaFX & SWT 8
C Swing Linux mag mein Swing-repaint() nicht... AWT, Swing, JavaFX & SWT 7
J Swing paintComponent() - repaint() - BufferedImage anzeigen AWT, Swing, JavaFX & SWT 5
Luk10 repaint() auch in anderen Klassen! AWT, Swing, JavaFX & SWT 6
A repaint() zu langsam, bitte um alternativen AWT, Swing, JavaFX & SWT 5
T Überlappende Transparenz und repaint() AWT, Swing, JavaFX & SWT 10
E EINFACHE Verständnisfrage zu repaint(), paintComponent(), usw. AWT, Swing, JavaFX & SWT 16
O Girdbag Formatierung nach repaint verloren AWT, Swing, JavaFX & SWT 2
E Swing - repaint() AWT, Swing, JavaFX & SWT 6
T Image wird nicht angezeigt?! - MediaTracker/repaint AWT, Swing, JavaFX & SWT 9
E AWT Problem mit Repaint (in Loop oder Timer) AWT, Swing, JavaFX & SWT 3
O Exception bei repaint AWT, Swing, JavaFX & SWT 3
D Fragen zu Swing, paintComponent() und repaint AWT, Swing, JavaFX & SWT 6
Dit_ Zeilenmarkierung verschwindet nach repaint() AWT, Swing, JavaFX & SWT 12
A Swing Infinite repaint loop unterbrechen AWT, Swing, JavaFX & SWT 7
hdi Swing EDT macht kein repaint() AWT, Swing, JavaFX & SWT 2
F "Verrutschen" von Komponenten bei repaint() AWT, Swing, JavaFX & SWT 9
Junker Fensterinhalt vor ausführen von repaint komplett löschen. AWT, Swing, JavaFX & SWT 2
T Fenster wird trotz repaint() und revalidate() nicht sofort neu gezeichnet AWT, Swing, JavaFX & SWT 6
E Graphics2D: altes Objekt löschen, wenn repaint aufgerufen wird AWT, Swing, JavaFX & SWT 7
J Swing Verständnis-Problem repaint(int x,int y,int width,int height) AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben