Swing Threads Windows 7 64 bit

sooney

Mitglied
Hey Java-Freunde !

Ich hab da mal eine Herausforderung für Interessierte ;).

Vor einigen Monaten hab ich die Simulation "Game of Life" in Java gebastelt. Das ganze hab ich auf ein Windows 7 32bit System gemacht. Lief ohne Probleme. Jetzt hab ich auf meinem neuen Rechner mit Windows 7 64 bit versucht das Programm zum laufen zu bekommen und dabei eine Überraschung erlebt : Es läuft nicht mehr :( !

Beim entkäfern hab ich etwas entdeckt was ich noch nicht nachvollziehen kann:
es geht um folgende Zeilen:
Java:
	@Override
	public void run() {
		while(true){
//			System.out.println("thread running");
			if(rungame){
				System.out.println("game running");
				livingCells = 0;
				generationCounter.setText(String.valueOf((this.genaration ++)));
				nextLifeCyle();
				setCellStatus();
				panel.repaint();
				LivingCellCounter.setText(String.valueOf(this.livingCells));
				try {
					System.out.println("thread sleep");
					Thread.sleep(1000/this.lifeSpeed);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		
		}
	}

Dieser Thread sorgt dafür dass von einer Generation in die folgende gewechselt wird.
Das Problem ist folgendes: Im Debug-Modus läuft das Programm, als Anwendung jedoch nicht.
Wie ihr in Zeile 4 sehen könnt hab ich eine Konsolen-Ausgabe eingebaut um beim Programmablauf zu sehen ob der Thread läuft.
Die Ausgabe kommt aber nur im Debug-Modus. Wie kann das sein ?

Hat es etwas mit 64 bit - Systemen zu tun ?

Bei Interesse schick ich das Programm gerne per Mail !

Grüße sooney
 

Kr0e

Gesperrter Benutzer
Eine Frage: Der Rechner, auf dem du es das 1. hast laufen lassen, (Windows 7 32 bit)... Wieviele Prozessoeren hat der ? -> Race condition!
 

twseitex

Mitglied
Hallo,

nur eine Idee:

die IDE ist für das Windows passend, so wie das Java, oder ?
Unterschied zum Debugmodus bei Win 7 ... gibt es den ?

Cu.

P.S.: Ich arbeite mit der IDE von Eclipse.
Und Autoausfüllen der Exceptions ist was für Faule *fg. Eclipse
packt das nämlich nicht immer korrekt.
 

sooney

Mitglied
Danke für eure Reaktion auf meine Frage.

Der alte Rechner war ein 2-Kerner mit 1.9 ghz. Jetzt hab ich nen
Amd mit 4 Kernen a 3 ghz.
Ich nutze Eclipse als Entwicklungsumgebung.
Java ist in der aktuellen version drauf. Tja was soll ich zu
den generierten exceptions sagen ;)... entwickler sind, wenn sie es können faul !


gruß sooney
 

Cola_Colin

Top Contributor
Der alte Rechner war ein 2-Kerner mit 1.9 ghz. Jetzt hab ich nen
Amd mit 4 Kernen a 3 ghz.

Es wird an dem Umstieg von 2 auf 4 Kerne liegen, der dir hier eine race-Condition offenbart hat.
Das erklärt auch wunderbar, wieso es im Debugmodus geht.

Wie genau äußert sich das nicht funktionieren den ?
Du sagt die Konsolenausgabe erscheint nicht, also wird wohl rungame false sein.
Ist der Zugriff auf rungame synchronisiert oder ist zumindest die Sichtbarkeit von Änderungen durch volatile sichergestellt ?
 

Kr0e

Gesperrter Benutzer
Also doch den richtigen Riehcer gehabt ^^ Vorallem: Wirklcih 2Kern ? Oder vlt einfahc nur Pentium 4 mit Hyper Threading... Und außerdem: Welche OS Einstellungen ? Man kann bestimmten Programmen sagen, dass sie nur auf einem Kern laufen sollen...

Also: Programme IMMER so auslegen, dass sie Multicore tauglich sind!
 

sooney

Mitglied
Ich hab auch schon vermutet das es am rechner liegt jedoch kann ich das nicht verstehen. Es wird ja nicht einmal die "while" im normalen betrieb gestartet. Die erste ausgabe (auskommentiert) kommt nicht.
Was meinst du mit synchronisieren ? muss mann jetzt auch noch auf die hardware achten?

gruß sooney
 
Zuletzt bearbeitet:
M

maki

Gast
wie synchronisierst du rungame?

per locks/synchronized, volitale oder etwa gar nicht? ;)
 

Cola_Colin

Top Contributor
Kann man von deinem Codestück her eher schlecht sagen, aber vom Fehler her wirst du es irgendwo tun müssen, wo du es bisher nicht tust.
Wo wird dieser Thread den wie gestartet ?
Welche Threads gibt es bei dem Prog alle und wie greifen die auf welche Daten zu ?
 

sooney

Mitglied
Guten Morgen !

Es gibt eine Main-Methode welche die App und eigentlich den Thread starten soll:

Java:
public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				MainWindow mainWindow = new MainWindow();
				mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				mainWindow.setVisible(true);
				
			}
		});
		
	}

Bei der initialiesierung von MainWindow wird die Oberfläche gezeichnet und dann der Thread gestartet. Über einen Button wird "rungame" auf true gesetzt. Rungame ist dabei nicht synchronisiert oder volitale . Jetzt hab ich in der Main-Methode die InvokeLater-Methode entfernt und siehe da das Programm läuft ! ???

Ich komme aus der Web-Entwicklung und habe wenig mit Swing und Co. zu tun ( nur mal so zur Rechtfertigung ;) ) ,jedoch war ich der Meinung dass es bei Swing notwendig ist eine InvokeLater oder einen SwingWorker zu nutzen ?

Muss man bei der Entwicklung von Desktop-Applikationen darauf achten wie die Prozessoren angesprochen werden sodass es nicht zu solchen Differenzen kommen kann ?
Wie kann das sein?
Oder war Invoke.Later oder SwingWorker nur eine Hilfe bei Single-Core Komponenten um Multi-Threading zu simulieren ?

Grüße sooney
 

Kr0e

Gesperrter Benutzer
Also um das hier mal eben klar zustellen:

Ein Programmierer muss immer auf Synchronisierung/Volatile achtenm, wenn mehrere Threads im Spiel sind.

Ich erklärs dir mal eben ganz kurz: Jeder Trhead hat einen lokalen Cache, in dem dieser Thraed seine benutzen Variablen speichert. Jede Variable existiert auch im Hautpseicher natürlich. Verändert ein Thread den Zustand einer Variablen OHNE "synchronized" oder "volatile" (Wie das geht, wird in unzähligen Tutorials gut erklärt) , dann ist es nicht garantiert, dass diese Änderung auch auf hauptvariable im hauptspeicher übertragen wird. Andere Thraeds die diesen Wert lesen sehen dann ggf noch den Initialisierungwert. Dieses Problem nennt sich Visibility (Concurrency). Natürlich gibt es noch weitere Probleme... Atomicity (Oder so ähnlcih) und Ordering. Ist alles nachzulesen.


Noch vergessen:

Um jetzt wieder auf die Anzahl der Prozessoeren zurück zukommen:

Bei einem Multicoreprozessor können thraeds dann WIRKLICH gleichzeitig laufen. Auf einem Single-COre gibt es zwar auch Thrads aber die werden sequentiell abgearbeitet. außerdem haben die CPUs ein ähnliches Speicherverfahren wie die einzelnen Thaeds....

Und ja, prinzipiell hast du Recht, Swing sollte wenn möglich im SwingThread ablaufen. Aber viele Methoden sind synchronized von den Objekten. Ich finde das Swing GUI was das angeht furchtbar unübersichtlich.... Die eine Methode ist sicher und dann die andere wieedr nicht... Naja^^
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
frager2345 Threads -> Ereignisbehandlung AWT, Swing, JavaFX & SWT 2
N jFrame löscht am Ende des Threads alles AWT, Swing, JavaFX & SWT 2
J GUI Ausgaben aus Threads AWT, Swing, JavaFX & SWT 13
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
N JavaFX Logging des JavaFX Application Threads mit Log4J AWT, Swing, JavaFX & SWT 3
U JAVAFX observer und threads AWT, Swing, JavaFX & SWT 1
J Textlabel verändern mit parallelen Threads AWT, Swing, JavaFX & SWT 7
Sugan Inhalte mit Threads ändern -> java.lang.IllegalStateException AWT, Swing, JavaFX & SWT 6
R Straßenkreuzung - Ampeln mit Threads koordinieren AWT, Swing, JavaFX & SWT 5
C Threads Swing AWT, Swing, JavaFX & SWT 11
Z JavaFX Threads AWT, Swing, JavaFX & SWT 4
T hallo, habe ein Problem mit dem pro. eines Threads AWT, Swing, JavaFX & SWT 4
M Threads - nicht erklärbare Exception AWT, Swing, JavaFX & SWT 6
R Repaint() in Schleifen, Threads AWT, Swing, JavaFX & SWT 13
S Java Swing GUI mit MVC und Threads AWT, Swing, JavaFX & SWT 6
M Frage zu Threads AWT, Swing, JavaFX & SWT 3
C JTextArea scrollt bei append(String) aus Threads nicht ans Ende AWT, Swing, JavaFX & SWT 7
K Threads - Timer - run() mehrfach parallel? AWT, Swing, JavaFX & SWT 2
B GUI mit Threads aufbauen AWT, Swing, JavaFX & SWT 5
E Threads Ausgaben in GUI anzeigen lassen AWT, Swing, JavaFX & SWT 14
P JavaFX 2 (2.1 Beta) Threads AWT, Swing, JavaFX & SWT 7
B Threads in Swing AWT, Swing, JavaFX & SWT 4
M Problem mit Threads AWT, Swing, JavaFX & SWT 64
R Swing Java Swing Gui und nebenläufige Threads AWT, Swing, JavaFX & SWT 4
J Threads + JFrame AWT, Swing, JavaFX & SWT 4
R Java threads und synchronized AWT, Swing, JavaFX & SWT 15
R Swing Swing und die Threads AWT, Swing, JavaFX & SWT 9
N Swing Threads sollen Tabtitel zur Laufzeit ändern AWT, Swing, JavaFX & SWT 4
S Gui und Aufgaben Threads AWT, Swing, JavaFX & SWT 12
M Zugriff paralleler Threads auf selbes JTextPane AWT, Swing, JavaFX & SWT 6
B Frage zu Swing,Threads, SwingWorker und Socket Communikation AWT, Swing, JavaFX & SWT 4
M Prioritäten bei SwingWorker / Threads AWT, Swing, JavaFX & SWT 9
B Swing GUI und Threads AWT, Swing, JavaFX & SWT 4
R Korrektes manipulieren der GUI aus anderen Threads heraus AWT, Swing, JavaFX & SWT 19
S Threads und Layout AWT, Swing, JavaFX & SWT 9
S Threads in einen Frame zeichnen lassen (Paint()?!) AWT, Swing, JavaFX & SWT 5
W GUI in mehreren Threads AWT, Swing, JavaFX & SWT 5
F Swing Anfängerproblem Threads AWT, Swing, JavaFX & SWT 6
S Swing Threads und das Ändern des Hintergrundes ... AWT, Swing, JavaFX & SWT 2
S Zeichnen in Threads AWT, Swing, JavaFX & SWT 4
T Auf Ende von mehreren Threads warten, ohne den EDT zu blockieren AWT, Swing, JavaFX & SWT 1
J SWT SWT und Threads AWT, Swing, JavaFX & SWT 5
borobudur SWT SWT-Framework und Threads AWT, Swing, JavaFX & SWT 12
W Threads nacheinander aufführen AWT, Swing, JavaFX & SWT 5
A Swing und Threads AWT, Swing, JavaFX & SWT 8
B JProgressbar wird nicht aktualisert, trotz Threads AWT, Swing, JavaFX & SWT 6
K Timer und Threads ruckeln für Fotoschwenk AWT, Swing, JavaFX & SWT 3
S JProgressBar und Threads AWT, Swing, JavaFX & SWT 11
G Probleme mit jList und Threads. AWT, Swing, JavaFX & SWT 3
R Swing & Threads AWT, Swing, JavaFX & SWT 4
R 2 Threads nacheinander. Einer terminiert, der andere nicht. AWT, Swing, JavaFX & SWT 9
J Unterschied zwischen SwingWorker und Threads AWT, Swing, JavaFX & SWT 4
P Threads und Swing bzw. AWT AWT, Swing, JavaFX & SWT 15
W Threads und trotzdem keine Nebenläufigkeit AWT, Swing, JavaFX & SWT 13
G Fenster erst nach Stoppen des Threads anzeigen AWT, Swing, JavaFX & SWT 3
N Threads kein neues Fenster erzeugen lassen AWT, Swing, JavaFX & SWT 4
G problem mit threads/repaint ! AWT, Swing, JavaFX & SWT 2
W Swing, 2 JProgressbars und threads geht das? AWT, Swing, JavaFX & SWT 2
A JTextArea und Threads AWT, Swing, JavaFX & SWT 9
B Probleme mit GUI und Threads AWT, Swing, JavaFX & SWT 17
E repaint(), EDT-Warteschlange und Threads AWT, Swing, JavaFX & SWT 26
S Threads in Java AWT, Swing, JavaFX & SWT 22
G AWT + Threads = nicht gut :P AWT, Swing, JavaFX & SWT 6
F Verständis Problem zu Threads AWT, Swing, JavaFX & SWT 2
M Swinganwendung Threads mit JProgressBar AWT, Swing, JavaFX & SWT 7
V Problem mit Aktualisieren von JList mit Threads AWT, Swing, JavaFX & SWT 3
U FileChooser Layout - Threads? AWT, Swing, JavaFX & SWT 17
R JProgressBar ohne Threads verwenden AWT, Swing, JavaFX & SWT 6
I JList, AbstractListModel und nebenläufige Threads AWT, Swing, JavaFX & SWT 2
S "Millionen" von Threads? Programm komplett beenden AWT, Swing, JavaFX & SWT 2
M Konsolenprg-Ausgabe in GUI geleitet - Brauche ich Threads? AWT, Swing, JavaFX & SWT 2
K Swing und Threads AWT, Swing, JavaFX & SWT 11
M Threads in Swing? AWT, Swing, JavaFX & SWT 2
C Schweres Problem mit JDialog und Threads! Anzeige blockiert! AWT, Swing, JavaFX & SWT 5
N Netzwerk-Applikation, SWT und Threads AWT, Swing, JavaFX & SWT 4
R createBufferStrategy() und Threads AWT, Swing, JavaFX & SWT 5
D Threads unter JFrame AWT, Swing, JavaFX & SWT 2
G Nochmal Threads und Einfrieren des GUI :( AWT, Swing, JavaFX & SWT 10
V Swing & Threads ??? AWT, Swing, JavaFX & SWT 3
D Problem mit JProgressBar und Threads AWT, Swing, JavaFX & SWT 7
MiMa JavaFX JAR unter Windows ausführen schlägt fehl? AWT, Swing, JavaFX & SWT 5
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
T Swing DPI-Skalierung und Java 2D unter Java 11 (und Windows 10) AWT, Swing, JavaFX & SWT 2
L Swing Panels bewegen wie Windows 10 Kacheln AWT, Swing, JavaFX & SWT 0
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
M Swing Code funktioniert auf Windows aber nicht Linux... AWT, Swing, JavaFX & SWT 3
Blender3D Meine Swing Anwendung läuft unter Windows 10 und Ubuntu aber nicht auf Windows 7 AWT, Swing, JavaFX & SWT 16
S Java Swing auf Windows Phone AWT, Swing, JavaFX & SWT 6
M Swing JComboBox mit Laufwerksbuchstaben (Windows) AWT, Swing, JavaFX & SWT 6
K JPanel Bilder bei Windows nicht darstellbar AWT, Swing, JavaFX & SWT 6
Ghostman1711 GUI Java von Klasse mit Application Windows anderes Application Window aufrufen AWT, Swing, JavaFX & SWT 6
Grevak DisplayMode Problem seit Windows 10 AWT, Swing, JavaFX & SWT 2
Avarion Swing JFrame unter Windows 10 kleiner ?! AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Windows Blue-Screen nach anzeigen eines Bildes in Java AWT, Swing, JavaFX & SWT 10
S Swing Automatisch 2px Rahmen in Windows 8 AWT, Swing, JavaFX & SWT 0
A Swing JProgressbar im Windows Look & Feel Farbanpassung AWT, Swing, JavaFX & SWT 2
P Verbuggte custom JButton unter Windows AWT, Swing, JavaFX & SWT 9
W Windows Fenster in einem Programm AWT, Swing, JavaFX & SWT 2
morphesus AWT Windows 7 Aero Look AWT, Swing, JavaFX & SWT 2
H Fenstergröße bei Mac und Windows gleich einstellen? AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben