repaint in paint aufrufen?

Status
Nicht offen für weitere Antworten.

goeba

Mitglied
Hallo,

in einer Java-Dokumentation fand ich den folgenden Code:

Code:
public void paint(Graphics g)
{
x = x + vx;
y = y + vy;
g.setColor(Color.red);
g.fillOval(x-r,y-r,2*r,2*r);
pause(15);
repaint();
}

Ich komme aus der C++-Welt, und da würde das einen Stack-Overflow auslösen, da repaint ja wiederum paint aufruft usw...

Jetzt ist es zwar einserseits schön, dass das in Java nicht passiert, aber einfach eine stilistische Frage: Macht man so was? Ist das nicht auch in Java schlechter Stil und kann das nicht irgendwann zu Problemen führen?


Viele Grüße,

Andreas
 

SebiB90

Top Contributor
goeba hat gesagt.:
Ich komme aus der C++-Welt, und da würde das einen Stack-Overflow auslösen, da repaint ja wiederum paint aufruft usw...
bei java sollte es nicht anders sein
besser wäre ein thread, denn wenn die paint methode ständig aufgerufen wird, wird der eventdispachterthread(oder so ähnlich) blockiert und usereingaben müssten dann nicht mehr möglich sein.
 

goeba

Mitglied
Hallo,

danke, das habe ich mir auch so gedacht.

Warum aber stürzt das Programm dann nicht ab? (Nur so interessehalber)

Viele Grüße,

Andreas
 

Illuvatar

Top Contributor
Das gibt keinen StackOverflow. Repaint sagt nur, dass der Eventthread das Fenster neuzeichnen soll. Das Neuzeichnen wird dann aber erst woanders wieder aufgerufen.
 

Bleiglanz

Gesperrter Benutzer
Hmm, afaik

repaint steckt das Fenster in die Warteschlange für neu zu zeichnende Objekte und dann "beim nächsten mal" wenn der Event-Thread Zeit dazu hat wird paint aufgerufen

was macht das pause(15), das hält doch den EventThread sinnlos auf?
 

Leroy42

Top Contributor
Bleiglanz hat gesagt.:
was macht das pause(15), das hält doch den EventThread sinnlos auf?

Eben nicht sinnlos, sondern gewollt. :cool:

Genau darauf wollte der Coder der Java-Dokumentation ja hinaus,
daß der rote Kreise sich, in angemessener Geschwindigkeit, entsprechend
der Delta-Werte vx/vy bewegt.

Abgesehen davon ist der Code nicht nur, wie Lectron schreibt, unsauber, sondern
schlichtweg Murks :autsch:

- Die Pausierzeit ist fest verdrahted, ohne jeden Bezug zur Geschwindigkeit.
- Es gibt keine Möglichkeit den Ablauf anzuhalten, sondern es werden sinnlos neue
Kreise gezeichnet, egal wo auch immer diese sich mittlerweile befinden (x=30000, ...)
 

Bert Brenner

Bekanntes Mitglied
Die "angemessene" Geschwindigkeit kann man auch erreichen wenn man nicht den EventThread blockiert. Das mag bei einfachen Animationen noch klappen, aber spätestens dann nicht mehr wenn man zeitnah auf eingaben reagieren will.

Zusätzlich wird paint nicht nur durch das repaint in seinem Programmcode aufgerufen sondern auch wenn sich seine Komponenten neu zeichnen müssen, z.b. nach dem minimieren. Das verlängert die Warteschlange mit zunehmender Laufzeit.
 

goeba

Mitglied
Hallo,
nur zur Information:
Die Funktion Pause schickt den Thread schlafen:
Code:
private void pause(int ms)
{
try
{
Thread.sleep(ms);
}
catch(InterruptedException e){}
}

Dass der Ball einfach weiterfliegt, wird später noch korrigiert.

Ich selbst hatte das Ganze mit einem Timer gelöst, der den Ball dann in einen Offscreenbuffer schreibt.

Ich denke, ich werde den Autor mal vorsichtig darauf hinweisen.

Viele Grüße,

Andreas
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
J paint() vs repaint() Java Basics - Anfänger-Themen 3
W repaint() ruft paint() nicht auf Java Basics - Anfänger-Themen 9
Y im applet malen ohne repaint paint ? Java Basics - Anfänger-Themen 6
D von paint() und repaint() im Applet Java Basics - Anfänger-Themen 4
D Wenn ich repaint(); mache, flackert es so stark, das man fast nichts erkennen kann. Java Basics - Anfänger-Themen 11
S Repaint() Java Basics - Anfänger-Themen 1
J Erste Schritte Mit repaint() ist Label nicht sichtbar Java Basics - Anfänger-Themen 15
S Repaint() in der Schleife funktioniert nicht immer Java Basics - Anfänger-Themen 5
H Graphics / repaint Java Basics - Anfänger-Themen 8
D Verhindern das repaint beim vergrößern aufgerufen wird Java Basics - Anfänger-Themen 9
M Liste mit repaint aktualisieren Java Basics - Anfänger-Themen 1
E Probleme mit repaint() Java Basics - Anfänger-Themen 15
K Erkennt repaint nicht Java Basics - Anfänger-Themen 1
1 repaint() Funktion erzeugt Flackern Java Basics - Anfänger-Themen 33
I Anfängerfrage JPanel repaint() Java Basics - Anfänger-Themen 6
A externer repaint Aufruf Java Basics - Anfänger-Themen 9
G Problem mit repaint() Java Basics - Anfänger-Themen 2
J repaint() geht gar nicht; GUI aktualisieren Java Basics - Anfänger-Themen 10
C repaint wird nicht während Druck auf Maustaste ausgeführt. Java Basics - Anfänger-Themen 4
A Methoden repaint() zeichnet JPanel falsch Java Basics - Anfänger-Themen 3
P [JTable] Problem mit repaint() Java Basics - Anfänger-Themen 2
P Interpreter-Fehler Im for loop funkzioniert repaint nicht :( Java Basics - Anfänger-Themen 4
M repaint() in run-Methode funktioniert nicht Java Basics - Anfänger-Themen 9
O Probleme mit der repaint-Funktion Java Basics - Anfänger-Themen 6
J repaint() funktioniert nicht wie gewünscht Java Basics - Anfänger-Themen 30
I Hangman CardLayout/repaint? Java Basics - Anfänger-Themen 2
H Variablen Probleme mit repaint() Java Basics - Anfänger-Themen 2
J repaint(); launisch ? Java Basics - Anfänger-Themen 3
E Altes Bild bei repaint() löschen? Java Basics - Anfänger-Themen 10
Z Wie repaint() bei Uhr realisieren? Java Basics - Anfänger-Themen 12
N JScrollPane repaint(); geht nicht Java Basics - Anfänger-Themen 4
I repaint bei jpanel Java Basics - Anfänger-Themen 10
T repaint wir nicht mehr geöffnet! Java Basics - Anfänger-Themen 38
T Canvas aktualisierung mit repaint Java Basics - Anfänger-Themen 5
C GUI aktualisieren: repaint, validate, Fenstergröße ändern bringt nichts Java Basics - Anfänger-Themen 13
Antoras Swing repaint und Nullpointer Java Basics - Anfänger-Themen 6
O repaint() wird nicht ausgeführt Java Basics - Anfänger-Themen 3
S problem mit repaint() in Thread Java Basics - Anfänger-Themen 6
Antoras swing und repaint-Ersatz Java Basics - Anfänger-Themen 8
G Automatischer repaint bei Swing so wie bei AWT? Java Basics - Anfänger-Themen 7
M Problem mit repaint Java Basics - Anfänger-Themen 2
R Probleme beim Repaint Java Basics - Anfänger-Themen 3
T repaint einer komponente Java Basics - Anfänger-Themen 2
E repaint() aufrufen Java Basics - Anfänger-Themen 12
F paintComponent mit repaint() aufrufen Java Basics - Anfänger-Themen 27
kulturfenster Probleme mit repaint() Java Basics - Anfänger-Themen 2
S SelectionListener + repaint().Verständnisproblem ;) Java Basics - Anfänger-Themen 7
K Repaint() in Methode Java Basics - Anfänger-Themen 13
G Frage zu repaint() Java Basics - Anfänger-Themen 5
D JPanel repaint() wird nicht gemacht! Java Basics - Anfänger-Themen 7
B Problem mit repaint() Java Basics - Anfänger-Themen 8
V Reihenfolge von Befehlen - hier repaint() zu spät Java Basics - Anfänger-Themen 13
F repaint() - Methode verzögern lassen? Java Basics - Anfänger-Themen 3
I Erst repaint() dann zeichnen? Java Basics - Anfänger-Themen 6
J probleme mit repaint Java Basics - Anfänger-Themen 2
F Swing - Fehler - Paint Methode Java Basics - Anfänger-Themen 7
S awt: paint Methode zeigt nichts an Java Basics - Anfänger-Themen 9
S Paint Anwendung: Freihandlinien zeichnen Java Basics - Anfänger-Themen 4
S Erste Schritte drawOval Problem in Paint Anwendung Java Basics - Anfänger-Themen 1
R Begrenzer Anzahl von paint() ? Java Basics - Anfänger-Themen 3
thet1983 start & paint Methode? Java Basics - Anfänger-Themen 0
S Interface JButton etc. wird in JFrame mit paint() nicht angezeigt Java Basics - Anfänger-Themen 6
M Probleme mit paint() aus java.awt.Graphics Java Basics - Anfänger-Themen 2
D Wert einer Variable in paint-Methode verwenden Java Basics - Anfänger-Themen 2
OnDemand Berechnung in die start und paint Methode eines Applets Java Basics - Anfänger-Themen 28
T Vererbung Wann wird die Methode paint aufgerufen? Java Basics - Anfänger-Themen 4
L Paint() wird scheinbar nicht richtig ausgeführt Java Basics - Anfänger-Themen 8
N aus Container components paint Java Basics - Anfänger-Themen 2
A Problem mit paint() Java Basics - Anfänger-Themen 2
A Aufruf der paint() Methode Java Basics - Anfänger-Themen 3
Dogge Problem mit paint(Graphics g) im Applet Java Basics - Anfänger-Themen 13
J Problem mit paint(Graphics g) Java Basics - Anfänger-Themen 4
L Erste Schritte Swing oder SWT Paint mit Grafikkarte? Java Basics - Anfänger-Themen 7
T paint() wird nicht aufgerufen Java Basics - Anfänger-Themen 2
K paint() mit einfügen Java Basics - Anfänger-Themen 14
K doppeltes paint beim Drucken Java Basics - Anfänger-Themen 8
J paint-methode blockiert settings von JComponents Java Basics - Anfänger-Themen 5
F Eine Frage über paint() Funktion Java Basics - Anfänger-Themen 2
S [Applet] Objekte von init bei paint benutzen Java Basics - Anfänger-Themen 9
R Methoden Zeichnen auf Button-Druck durch Paint-Methode Java Basics - Anfänger-Themen 2
J Zweimal im gleichen Paint-Fenster malen Java Basics - Anfänger-Themen 8
A paint() methode von externer Klasse aufrufen Java Basics - Anfänger-Themen 3
J Paint Methode von JPanel aufrufen Java Basics - Anfänger-Themen 15
V paint funktioniert nicht Java Basics - Anfänger-Themen 14
Q Zeichnen außerhalb der paint-methode Java Basics - Anfänger-Themen 7
O Paint Programm mit Fehler Java Basics - Anfänger-Themen 2
A Methoden Variablen in paint methode Java Basics - Anfänger-Themen 4
K Problem mit Parameter von paint(Graphics g) Java Basics - Anfänger-Themen 3
S Datentypen Paint Programm Java Basics - Anfänger-Themen 7
M paint-Methode funzt nicht Java Basics - Anfänger-Themen 11
L Paint zeichnet nicht gespeicherte Objekte Java Basics - Anfänger-Themen 3
D OOP paint() Methode aus Unterklasse anstoßen Java Basics - Anfänger-Themen 3
A paint() - warum nicht aufrufen? Java Basics - Anfänger-Themen 3
K Scrollbar - Bild - paint-Methode - zoom Java Basics - Anfänger-Themen 10
S super.paint() Java Basics - Anfänger-Themen 4
S Bild aus paint() Methode auslagern Java Basics - Anfänger-Themen 14
T Etwas an paint()-Methode übergeben? Java Basics - Anfänger-Themen 6
TheKing Paint-Methode aufrufen Java Basics - Anfänger-Themen 14
N paint methode statt Event-Handling-Methode Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben