aus Thread auf Panel zeichnen

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi, ich versuche gerade in Java zu zeichnen.

Ich habe einen Thread, der regelmäßig auf ein jPanel zeichnen soll. Dazu verwende ich im run() eine Whileschleife mit isInterrupted() als Abbruchbedingung. Ich bin mir jetzt nur unsicher, worauf ich zeichnen soll. Ich würde gerne erst auf ein Offscreen-Image zeichnen und dieses dann auf das jPanel zeichnen, um flackern zu vermeiden.
Wie bewerkstellige ich das am besten? Übergebe ich dem Thread im Konstruktor eine Referenz auf das jPanel, speichere diese in einer Membervariablen und hole mir dann im run() per getGraphics das Graphics worauf ich mein Offscreen-Image zeichne? Oder was würdet ihr empfehlen? Und welches ist eine passende Offscreen-Image Klasse? BufferedImage?

Freue mich auf eure Hilfe! :)
 

Wildcard

Top Contributor
1. Niemals getGraphics verwenden
2. Nur der Event-Dispatcher-Thread darf zeichnen, kein anderer Thread.
 
G

Guest

Gast
Wildcard hat gesagt.:
1. Niemals getGraphics verwenden
2. Nur der Event-Dispatcher-Thread darf zeichnen, kein anderer Thread.

Mit 1. kann ich lebgen, wenn ich eine Alternative finde, aber wieso darf ich denn aus meinem eigenen Thread nicht zeichnen?

Dann wäre ja die einzige Alternative, die Paint-Methode meines Panels zu überschreiben und von dort auf die Daten meines Threads zuzugreifen, oder? Immerhin hätte ich dann auch Model und View besser getrennt...
 

Wildcard

Top Contributor
Weil Swing/AWT nicht Threadsicher ist und das Ergebnis undefiniert ist, wenn an anderer Thread dennoch versuch zuzugreifen.
SWT ist da konsequenter und wirft direkt eine Exception wenn dieser Fall eintritt.
Ja, du musst paint überschreiben (warum verwendest du überhaupt noch AWT?) und dort auf Daten zugreifen.
Aber warum liegen bei dir Daten in einem Thread?
Einen Thread kannst du dazu verwenden ein Datenmodell zu befüllen, aber welche Konstruktion du verwendest erschließt sich mir nicht direkt.
 
G

Guest

Gast
Es geht um eine Simulation, die jede Sekunde aktualisiert werden soll. Damit das ganze vom User-Interface getrennt ist der eigene Thread. Der Thread berechnet also einmal pro Sekunde die Daten neu und schreibt diese in eine entsprechende Datenstruktur (typisierter Vektor). Damit der Benutzer davon auch was mitbekommt soll das ganze dann neu gezeichnet werden.
Warum sollte ich die Daten in einer extra Klasse verwalten, der Thread ist doch dazu gut zu gebrauchen, oder nicht? Ich könnte natürlich den Thread auch nur dazu gebrauchen, die Methode einer Klasse, welche die Daten verwaltet aufzurufen, aber ich sehe da den Vorteil nicht. Höchstens vielleicht, dass die Klasse nicht so sehr auf dieses Programm festgelegt ist.
 

Wildcard

Top Contributor
Das wird so nicht funktionieren, zumindest nicht richtig.
Swing/AWT ist wie gesagt nicht threadsicher. Das führt dazu, dass du bei bestimmten Running Conditions Artefakte auf dem Bildschirm produzieren wirst.
Normales Vorgehen:
Du hast ein Datenmodell auf das nur im EDT zugegriffen wird. Der Controller liegt als Listener auf dem Model und aktualisiert die View sobald das notwendig wird.
Der Thread manipuliert die Daten nicht direkt, sondern macht das über SwingUtilities#invokeLater.
 
G

Guest

Gast
Danke schonmal für deine Hilfe. Hört sich weit aus komplizierter an, als ich erwartet hab.

Gibt es dazu irgendwas lesenswertes? Oder könntest du/jemand anderes den grundlegenden Aufbau noch detailierter ausführen?

Soweit ich das jetzt verstanden habe muss ich die Daten in einer Klasse, die, wie mein View im EDT läuft verwalten. Mein "Berechnungs-Thread" berechnet die neuen Daten einmal die Sekunde und aktualisiert sie per SwingUtilities#invokeLater. Und dann bitte ich das JPanel mit repaint() dazu neuzuzeichnen. Ist das so in Ordnung?
 

merlin2

Top Contributor
Der Gast da oben war ich. :oops:
Im FF funktioniert das Video zwar, aber es sollte doch auch im IE laufen, oder?
 

Wildcard

Top Contributor
Nein, der IE kann nur Speicher verbrennen und Sicherheitslücken aufreißen. Das er ab und zu auch etwas anzeigt ist vermutlich ein Threading Issue...
 

Leroy42

Top Contributor
merlin2 hat gesagt.:
Andere Flash-Videos laufen bei mir, nur nicht das auf http://www.javalobby.org/eps/galbraith-swing-2/. :?

Bei mir genau dasselbe; vielleicht hat es ja mit dem Quelltext
der Seite zu tun:

JavaScript-Anweisung des Quelltextes hat gesagt.:
var Opera7plus = ((document.all)&&(navigator.userAgent.indexOf("Opera 7")!=-1)) ? true : false;

Ich habe Opera 9.21; ich schätze mal der JavaScript-Code der Seite
schließt den Opera 9.xx einfach fälschlicherweise einfach aus. :(
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A g=panel.getGraphics() im Thread => Nullpointer Java Basics - Anfänger-Themen 9
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-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
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
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
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
A Problem mit Thread.sleep Java Basics - Anfänger-Themen 4
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
B Thread Problem Java Basics - Anfänger-Themen 7
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
J BouncingBalls 1 Thread Java Basics - Anfänger-Themen 3
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
J Timer oder Thread programmieren ? Java Basics - Anfänger-Themen 10
fLooojava Laufender Thread | Boolean ändern Java Basics - Anfänger-Themen 9
T Thread Pool mit Work Stealing Java Basics - Anfänger-Themen 1
R Java Thread Java Basics - Anfänger-Themen 10
J Welche Methoden laufen im neuen thread ?? Java Basics - Anfänger-Themen 9
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
K Thread - Methoden in die run Methode Schreiben Java Basics - Anfänger-Themen 5
N Threads Exception in thread "main"... Feher bei dem Versuch ein Radius zu berechnen Java Basics - Anfänger-Themen 4
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
V Threads Exception in Thread behandeln Java Basics - Anfänger-Themen 3
S Methoden Multi-Thread und Methoden Objects. Java Basics - Anfänger-Themen 1
J Thread erstellen (BlueJ Projekt) Java Basics - Anfänger-Themen 3
P Exception in thread "main" java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 1
F Threads Variable aus einem Thread in main Methode? Java Basics - Anfänger-Themen 9
K Exception in thread "main" Java Basics - Anfänger-Themen 7
L Thread-Frage Java Basics - Anfänger-Themen 2
E Was ist ein idle-thread? Java Basics - Anfänger-Themen 1
D Exception in thread "AWT-EventQueue-0" Java Basics - Anfänger-Themen 8
J Threads Prozess in Thread auslagern Java Basics - Anfänger-Themen 2
G Thread mehrmals starten und schliessen Java Basics - Anfänger-Themen 6
F Thread Koordination (Vorteile/Nachteile) Java Basics - Anfänger-Themen 0
O Thread aus dem Thread stoppen Java Basics - Anfänger-Themen 6
O Swingworker/Thread Java Basics - Anfänger-Themen 3
R Focus auf JPanel im Thread Java Basics - Anfänger-Themen 9
S musik in eigenem thread Java Basics - Anfänger-Themen 2
A Klasse,Vererbung,Interface,Singleton,Thread Java Basics - Anfänger-Themen 5
IngoF GUI mit Thread Daten austauschen. Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben