Programm aufgrund von paint() zu langsam

Status
Nicht offen für weitere Antworten.
S

soFar

Gast
Hallo,

ich habe folgendes Problem mit meinem Java Programm:
Im unteren Bereich befindet sich eine Animation, die sich häufig verändert (und dabei auch ihre Größe verändert).
In meiner erste Implementierung hab ich dieser Animation den GlassPane zugewiesen,
bei einem zweiten Versuch hab ich es mit LayeredPane versucht,
aber .. das Problem bleibt.. mein Programm ist zu langsam..
was wohl daran liegt, dass alles zu oft neu gezeichnet wird.. alleine beim Start über 30 aufrufe der paintComponent() Methode der Objekte oberhalb der Animation ... und immer wenn sich an der Animation was tut (abhängig von der Maus) kommen wieder x aufrufe hinzu, was die animation schon deutlich langsamer macht (je nachdem, was ich sonst noch für objekte in meinem fenster habe)..

gibt es eine Methode, wie ich meinem Programm sagen kann, wann es was neuzeichnen soll.. also nicht immer alles..
z.b. ne Gruppierungsfunktion...
denn.. die Animation hat nur eine bestimmte maximale Größe.. erreicht garnicht alles.. Trotzdem wird das komplette Fenster neu gezeichnet...

hat jemand ne idee?

MfG
 

André Uhres

Top Contributor
soFar hat gesagt.:
..und dabei auch ihre Größe verändert..
Ich denke mal, das hängt viel davon ab, wie du die die gesamte Oberfäche zusammengestrickt hast.
Wenn z.B. dabei eine Grössenanpassung von anderen Panels erforderlich wird,
dann muss natürlich jedesmal ganz neu gezeichnet werden :wink:
 
S

soFar

Gast
nein.. die anderen Objekte bleiben unverändert....
es kann nur zu einer überlappung der animation mit den Objekten obendrüber kommen... aber auch wenn dies nicht geschieht wird alles neu gezeichnet..
aus testzwecken hab ich auch mal der animation den halben bildschirm gegeben und die anderen objekte in der anderen häfte angeordnet, so dass die sich auf keinen fall in die quere kommen können.. trotzdem wird alles statt nur die animation neu gezeichnet... und wenn diese sich bei der kleinsten mausbewegung (über der animation) verändert, kommen da ne menge aufrufe zusammen....
 
M

Michael...

Gast
wie ist den die Oberfläche aufgebaut? Welche paintComponent() wird überschrieben? Ein bisschen Code wäre auch nicht schlecht...
 
G

Guest

Gast
das mit dem Code ist schwierig, weil es sich um ein größeres Prog. handelt

ich arbeite hauptsächlich mit JPanels..

+---------+-----+
|.............|.......|
|......a.....|..b...|
|.............|.......|
+---------+-----+
|...........c.........|
+----------------+


a und b sind jeweils extends JPanel ..
und in der paintComponent Methode lasse ich (auf verschiedene Art und Weise) den Hintergrund berechnen...

in der ersten Variante ist c nur ein "leeres Feld" .. ein platzhalter.. weil ich das BorderLayout verwendet habe.. aber c glassPane sein muss (weil es seine größe z.b. verändert etc)

in der zweiten Variante arbeite ich auf LayeredPane Ebene..
dort ist C dann die Animation mit dem höchsten Integerwert...

wenn ich z.b. es folgendermassen anordne:
+---------+-----+
|......a.....|..b...|
+---------+-----+
|........nichts.....|
+----------------+
|...........c.........|
+----------------+

wird a und b jedes mal neugezeichnit...

ich würde halt gerne sowas machen wie
if (c wird neu gezeichnet){
zeichne nur das was ich dir sage neu
}
else {
nichts
}
 
G

Guest

Gast
natürlich ist es nicht gerade schnell, wenn ich dort ein Hintergrundbild laden lasse...
aber.. wenn mein programm begreifen würde, dass er das z.b. beim start nicht 30 mal.. sondern nur einmal berechnen muss, wäre das schonmal gut...
 

Marco13

Top Contributor
Wenn du es einfach bleiben lassen, und stattdessen woanders laden würdest, wäre das sogar noch besser :roll: Aber kannst ja in der repaint ein boolean-flag setzen 'imageAlreadyLoaded' :autsch: :wink:
 
G

Guest

Gast
Code:
Wenn du es einfach bleiben lassen, und stattdessen woanders laden würdest, wäre das sogar noch besser
?

Code:
Aber kannst ja in der repaint ein boolean-flag setzen 'imageAlreadyLoaded'
wenn ich sowas in die paintComponent methode einbauen, ist das Bild am Ende weiß .. weil es nur am anfang geladen wurde danach aber von "nichts" überschrieben wurde...
 
G

Gast

Gast
edit:
was macht z.b. dieser RepaintManager .. könnte er mir weiterhelfen?
 
S

soFar

Gast
..
wie mache ich das z.b. wenn ich nur ganz billig sagen will, dass er das bild bei jedem 32. aufruf neuzeichnen soll...

Code:
                int n=32;
	
		@Override 
		protected void paintComponent( Graphics g ) { 

	    	Graphics2D g2 = (Graphics2D)g;	
			
	    	if(n==32){
	    		super.paintComponent( g );
                        //hier malt er mir nun was feines
		        n=0;
	    	}
		n++;
		System.out.println("Aufrufnr.: "+n);
		}


.. leider.. zeichnet er mir immer wenn n!=32 ist ne weisse fläche...
wie kann ich das umgehen?
 

Wildcard

Top Contributor
Ich hab dir doch gesagt wie du den repaint Bereich einschränkst!
Und in paintComponent darfst du definitiv nichts laden. Das dauert viel zu lange.
 
S

soFar

Gast
das Bild wird natürlich nicht in der paint-Methode geladen..
ich hab es zu dem zeitpunkt schon.. aber alleine das Zeichnen reicht, um es zu bremsen.. nur mit einem einfarbigen Hintergrund ist die geschwindigkeit in ordnung..
und es liegt daran, dass alles zu oft neugezeichnet wird...

ich konnte mit deinem link leider nicht so viel anfangen..
es gibt kein repaint(), das ich einfach duch ein repaint(x,y,w,h) ersetzen könnte..
falls du es nicht so gemeint hast, erklär es bitte nochmal für dumme...
 
S

soFar

Gast
indem java merkt, dass sie was an der animation verändert hat
und diese neugezeichnet werden muss..
und immer wenn dies geschieht, wird leider alles (das komplette Fenster) neu gezeichnet
 
S

soFar

Gast
gibt es eine Methode (Tools, Plugins) mit denen man herrausbekommt, wann (von wem) die paintComponet von a und b (siehe Bild erste Seite) aufgerufen wird..
ich benutze Eclipse.. das liefert nicht reinzufällig sowas mit, oder?
 
D

dandi

Gast
unter Eclipse 3.3 (Europa) gibt es das Plugin TPTP. mit dem läßt sich ein Laufzeit- oder Speicherbedarf-Profiling machen.
gesetzt den Fall es schmiert nicht permanent ab...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin starten maven javafx programm ohne netbeans AWT, Swing, JavaFX & SWT 38
P AWT Programm funktioniert nicht richtig AWT, Swing, JavaFX & SWT 35
G CAD Programm AWT, Swing, JavaFX & SWT 4
thor_norsk E - Mail Programm AWT, Swing, JavaFX & SWT 2
_user_q Über installDist exportiertes Programm wirft "Unsupported JavaFX configuration" AWT, Swing, JavaFX & SWT 0
CodingBerlin JavaFX Programm läuft nur unter Eclipse AWT, Swing, JavaFX & SWT 1
J Programm findet Resource nicht. AWT, Swing, JavaFX & SWT 6
N Programm Läuft nicht auf anderen Pcs AWT, Swing, JavaFX & SWT 9
imawake Java Paket-Tracking Programm 📦 AWT, Swing, JavaFX & SWT 7
S Lustiges programm schnell coden? AWT, Swing, JavaFX & SWT 2
O Ein Java-Programm mit Swing steuern AWT, Swing, JavaFX & SWT 1
P Swing Programm hängt sich bei Buttondruck auf? (GUI für "Chatbot" erstellen) AWT, Swing, JavaFX & SWT 15
M DragAndDrop - aus Browser ins Programm AWT, Swing, JavaFX & SWT 6
T Java GUI - Würfel Programm AWT, Swing, JavaFX & SWT 6
JojoSand Java Programm wird nicht gestartet - keinen Fehlerhinweis AWT, Swing, JavaFX & SWT 9
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
I Gui in bestehendes Java-Programm AWT, Swing, JavaFX & SWT 11
L JavaFX IntelliJ Standalone Programm exportieren AWT, Swing, JavaFX & SWT 9
Bluedaishi JavaFX Programm start mit zwei scenen bzw Fenster AWT, Swing, JavaFX & SWT 1
M AWT Programm in den Tray minimieren AWT, Swing, JavaFX & SWT 2
steven789hjk543 Swing Weiß jemand, warum dieses Programm nicht funktioniert? AWT, Swing, JavaFX & SWT 7
A Java Programm gestalten AWT, Swing, JavaFX & SWT 4
P Swing Warum startet das Programm nicht? AWT, Swing, JavaFX & SWT 3
J JavaFX Kamera im Programm öffnen AWT, Swing, JavaFX & SWT 6
H Hintergrundbild in einem Programm AWT, Swing, JavaFX & SWT 4
MR._FIRE_Flower progressBar in ein bestehendes Programm einbauen AWT, Swing, JavaFX & SWT 3
J Verbesserungsvorschläge?! Kleines AWT Programm AWT, Swing, JavaFX & SWT 4
A Programm nun in ein Frame basteln AWT, Swing, JavaFX & SWT 1
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
G Zeichnen Programm AWT, Swing, JavaFX & SWT 1
R Swing Programm läuft nur beim Debuggen korrekt ab AWT, Swing, JavaFX & SWT 4
Arif Swing Programm friert ein... AWT, Swing, JavaFX & SWT 2
apple_pie1998 Programm gibt plötzlich exceptions aus. AWT, Swing, JavaFX & SWT 4
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
X JMenu Menu-Bar ausrichtung ändern im Programm AWT, Swing, JavaFX & SWT 0
T Swing Programm hängt sich auf! AWT, Swing, JavaFX & SWT 23
L Probleme mit Programm AWT, Swing, JavaFX & SWT 13
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
P Programm durch Dateiaufruf starten und Datei öffnen AWT, Swing, JavaFX & SWT 2
S Action durchführen beim Programm beenden AWT, Swing, JavaFX & SWT 3
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
G Programm GUI erstellen AWT, Swing, JavaFX & SWT 5
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
T Programm im METRO Design? AWT, Swing, JavaFX & SWT 1
J Programm hängt sich bei Log In auf AWT, Swing, JavaFX & SWT 1
C Programm mit Passwort schließen AWT, Swing, JavaFX & SWT 5
D Robot Programm mit Escape abbrechen (aus Eclipse heraus) AWT, Swing, JavaFX & SWT 2
N Programm läuft perfekt in Eclipse aber nicht in .JAR AWT, Swing, JavaFX & SWT 3
S JScrollPane --> Programm hängt sich beim scrollen auf AWT, Swing, JavaFX & SWT 2
J Programm im GUI ausführen AWT, Swing, JavaFX & SWT 4
A Probleme mit 2 JFrames in einem Programm AWT, Swing, JavaFX & SWT 7
S Event Handling konsole Programm mit Tastendruck beenden AWT, Swing, JavaFX & SWT 5
G JTextArea on the fly aus anderem Programm befüllen AWT, Swing, JavaFX & SWT 4
K Swing Konsolen Programm in GUI - Suche Hilfe bei Konsolenausgabe AWT, Swing, JavaFX & SWT 2
W Windows Fenster in einem Programm AWT, Swing, JavaFX & SWT 2
F Mal Programm AWT, Swing, JavaFX & SWT 13
C In Hauptfenster Programm-Klassen implementieren AWT, Swing, JavaFX & SWT 9
A KeyListener Button wechseln & Programm beenden AWT, Swing, JavaFX & SWT 4
C Swing Wie kann ich im Programm das Menü schließen AWT, Swing, JavaFX & SWT 2
J SWING - Programm ohne Eclipse etc. starten AWT, Swing, JavaFX & SWT 7
J Button soll nach Klick Text ändern und Programm in 3 Sekunden beenden AWT, Swing, JavaFX & SWT 6
M Programm hängt sich auf nachdem repaint() benutzt wurde AWT, Swing, JavaFX & SWT 2
M Programm in Jframe "einbinden" AWT, Swing, JavaFX & SWT 7
S Programm auf aktuellen Stand bringen AWT, Swing, JavaFX & SWT 2
Spin Tool: Popup -Programm AWT, Swing, JavaFX & SWT 3
GUI-Programmer Swing JWindow - Programm wird ohne Grund beendet AWT, Swing, JavaFX & SWT 3
E Kreis-Mal-Programm AWT, Swing, JavaFX & SWT 7
P Programm aktuallisiert sich nur beim Rüberzeigen AWT, Swing, JavaFX & SWT 6
T Java-Anwendung arbeitet Programm in seltsamer Reihenfolge ab AWT, Swing, JavaFX & SWT 3
C Programm für 5 sekunden anhalten und actionevent abfangen AWT, Swing, JavaFX & SWT 18
J Programm schließen AWT, Swing, JavaFX & SWT 4
J Programm nur einmal öffnen AWT, Swing, JavaFX & SWT 3
E Windows Kontext Menü - Laufendes Programm AWT, Swing, JavaFX & SWT 3
T Programm vom Desktop starten! AWT, Swing, JavaFX & SWT 2
S Programm pausieren während JDialog offen ist AWT, Swing, JavaFX & SWT 2
M Browser in Programm einbinden AWT, Swing, JavaFX & SWT 4
R Durch Listener lässt sich Programm nicht mehr ausführen AWT, Swing, JavaFX & SWT 4
H Userinput in GUI an externes Programm AWT, Swing, JavaFX & SWT 8
D Firefox aus Programm starten AWT, Swing, JavaFX & SWT 4
S LayoutManager Einfaches Programm mit VE und Eclipse3.6 realisieren AWT, Swing, JavaFX & SWT 2
J SWT 32 bit Programm für 64 bit Jave AWT, Swing, JavaFX & SWT 10
R GUI hängt während Programm läuft AWT, Swing, JavaFX & SWT 7
S AWT Fenster schließen und Programm beenden AWT, Swing, JavaFX & SWT 10
H Infofenster vor dem eigentlichen Java Programm AWT, Swing, JavaFX & SWT 3
B Uberschrift in Swing-Programm zur Laufzeit aendern... AWT, Swing, JavaFX & SWT 4
C Swing Kleines Programm mit SWING unter Verwendung von MVC AWT, Swing, JavaFX & SWT 5
capgeti Wie Programm in JPanel (o.ä.) starten? AWT, Swing, JavaFX & SWT 3
B Externes Programm mit Robot Steuern AWT, Swing, JavaFX & SWT 3
G Programm läuft nur auf manchen Rechnern AWT, Swing, JavaFX & SWT 10
M SWT Programm pausiert ungewollt AWT, Swing, JavaFX & SWT 5
K Website in Java Programm einbinden AWT, Swing, JavaFX & SWT 3
B komplettes programm in einem fenster AWT, Swing, JavaFX & SWT 5
L Frage bei Programm mit Zufallskreisen AWT, Swing, JavaFX & SWT 9
L Programm terminated (zu frueh) AWT, Swing, JavaFX & SWT 3
T SplashScreen im laufenden Programm AWT, Swing, JavaFX & SWT 2
M Panelinhalt im Programm verändern AWT, Swing, JavaFX & SWT 12
R Programm nicht mehr in der Taskleiste AWT, Swing, JavaFX & SWT 2
3TageBart Ebenen in Zeichen-Programm implementieren AWT, Swing, JavaFX & SWT 9
H Swing HUD in externes Programm einblenden AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben