GUI friert ein

Vintner

Mitglied
Hallo,

ich arbeite an einem Programm, das über den Modbus (verwende die jamod-Bib dafür) Daten aus einer SPS ausliest.
Dabei wird eine feste TCP-Verbindung aufgebaut. Die Klasse (ModCon genannt) dafür erbt von Thread, damit ich in einer Endlosschleife den Thread nach jedem Durchlauf beliebig lang pausieren lassen kann.
Um die Daten grafisch darzustellen habe ich eine GUI Programmiert die IP-Adresse und Port an ModCon schickt.
Beide Objekte haben ihren eigenen Thread, die GUI implementiert Runnable da sie schon von JFrame erbt.
Wenn das GUI Objekt die Daten losgeschickt hat und mein ModCon-Objekt die Verbindung aufbaut friert die GUI derweil ein. Ich weiß nicht genau warum, da ja beide Klassen ihren eigenen Thread haben.

Falls ihr noch mehr Informationen braucht poste ich die gerne.

Viele Grüße
 

XHelp

Top Contributor
Den Teil mit "GUI implementiert Runnable" habe ich zwar nicht verstanden, aber:
So ganz ohne Code lässt sich nur sagen: es läuft eben was schief.
Wenn du das ganze so gut es geht kürzt und hier postest, könnte man vlt etwas mehr sagen.
 

Vintner

Mitglied
Die GUI implementiert eig. Runnable damit sie unabhängig in einem eigenen Thread läuft, um zu verhindern dass sie einfriert ... dachte ich mir.

Hier mal etwas Code (geschnitten):

Main:

Java:
public class WetterMain{

	//Modbus Connection anlegen und in einen Thread packen
	static Thread mbc = new ModbusConnection();
	
	public static void main (String[] args){
		/*
		 * GUI erzeugen
		 */
		Visualisierung gui = new Visualisierung((GUIListener)mbc); //erzeugt die GUI
		(Runnable) gui.run();	//startet die GUI
		
		gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		gui.pack();
        gui.setVisible(true);
		gui.setSize(800, 600);
		
		mbc.addModbusListener((ModbusListener)gui);	//GUI der Connection als Listener übergeben
		
	}
}//WetterMain

Den Rest kann ich auch gerne kürzen und hochladen, aber dauert dann etwas länger :)
 

ARadauer

Top Contributor
Runnable damit sie unabhängig in einem eigenen Thread läuft, um zu verhindern dass sie einfriert ... dachte ich mir.
Das macht die GUI sowieos. Man nennt das den EventDispatcherThread. Wenn du jetzt etwas machst, zb ModbusConnection in einem Listener aufrufst musst du das in einem neuen Thread starten..

(Runnable) gui.run(); das ist auch nicht richtig.. einen Thread startet man nicht mit run... sondern mit start und dann wird intern die run Methode benutzt: Galileo Computing :: Java ist auch eine Insel - 12 Einführung in die nebenläufige Programmierung Ich glaube das ist das eigentliche Problem, dass deine Threads nicht als Thread laufen..
 

Vintner

Mitglied
Ah, danke. Dann schau ich gleich nochmal nach. Allerdsings funktioniert Thread.sleep() in den Threads ... von daher dachte ich dass sie funktionieren würden ...
 

Vintner

Mitglied
Ich habe jetzt den Thread für die GUI aufgehoben und die ModbusConnection über mbc.start() gestartet ... das klappt und die GUI friert nicht ein.

Vielen Dank
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben