Threads Probleme mit Thread

Kakulukiam21

Aktives Mitglied
Einen wunderschönen guten Morgen,

ich setz jetzt schon eine Weile an einer Problematik und finde dafür einfach keine Lösung, daher frage ich mal hier nach in der Hoffnung das eine Lösung gefunden wird.

Ich habe ein Programm, was an sich relativ Simple ist. Ich habe eine GUI auf der was dargestellt wird. Alles nicht so schwer. Jetzt soll aber in der GUI immer ein aktueller Wert aus der Datenbank geholt und dargestellt werden. Das aktualisieren habe ich jetzt in einem neuen Thread gestartet, falls es falsch war korrigiert mich bitte.

Jedoch funktioniert es ja auch soweit. Jede Sekunde wird ein der aktuelle Wert angezeigt. Wenn ich jedoch dann die Seite verlasse um mir eine andere anzuschauen (der Thread läuft in der Zeit weiter, da ich ihn nur einmal starten möchte) und komme dann auf die Seite wo ich den Wert anzeigen lass, wird er einfach nicht mehr angezeigt. Und ich weiß nicht wieso. (Da find ich das Wort Quälcode wieder passend)

Java:
public class Uebersicht {
	JPanel tmp;
	JTextArea temperatur_AT1;

	public void anzeige() {

		final JFrame window = new JFrame();
		window.setUndecorated(true);
		// Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		// window.setSize(screenSize);
		window.setSize(1024, 768);
		window.setLayout(null);

		tmp = new JPanel();
		tmp.setLayout(null);
		tmp.setBounds(375, 360, 120, 53);
		if (!DemoThread.isRunning) {
			DemoThread refreshTMP = new DemoThread();
			refreshTMP.textArea(tmp);
			refreshTMP.start();
		} else {
			// Hier soll einfach nur noch mal das refreshTMP.textArea(temp)
			// angezeigt werden,
			// ohne das ich noch mal ein Objekt von DemoThread erstelle. Meine
			// Idee war:
			temperatur_AT1 = new JTextArea();
			temperatur_AT1
					.setText(Double.toString(cn.getSollTemperaturMilch()));
			temperatur_AT1.setOpaque(true);
			temperatur_AT1.setBackground(Color.LIGHT_GRAY);
			temperatur_AT1.setEditable(false);
			temperatur_AT1.setHighlighter(null);
			temperatur_AT1.setFocusable(false);
			temperatur_AT1.setBorder(null);
			temperatur_AT1.setBounds(40, 10, 75, 40);
			temperatur_AT1.setFont(new Font("Arial", Font.PLAIN, 30));
			tmp.setVisible(true);

		}

	}

}

public class DemoThread extends Thread {
	DBConnect cn = new DBConnect();
	static DemoThread other;
	JTextArea temperatur_AT1;
	JFrame display;
	int thread = 0;
	static JPanel bg;
	static boolean isRunning = false;

	public void textArea(final JPanel tmp) {
		temperatur_AT1 = new JTextArea();
		temperatur_AT1.setText(Double.toString(cn.getSollTemperaturMilch()));
		temperatur_AT1.setOpaque(true);
		temperatur_AT1.setBackground(Color.LIGHT_GRAY);
		temperatur_AT1.setEditable(false);
		temperatur_AT1.setHighlighter(null);
		temperatur_AT1.setFocusable(false);
		temperatur_AT1.setBorder(null);
		temperatur_AT1.setBounds(40 ,10, 75, 40);
		temperatur_AT1.setFont(new Font("Arial", Font.PLAIN, 30));
		isRunning = true;
		bg = tmp;
	}

	public void run() {
		do {
			bg.add(temperatur_AT1);
			try {
				sleep(1000);
			} catch (InterruptedException e) {
			}
			temperatur_AT1
					.setText(Double.toString(cn.getSollTemperaturMilch()));
			bg.remove(temperatur_AT1);
			System.out.println();
		} while (thread == 0);
	}
	
}

Ich hoffe ihr könntet mir dabei helfen :oops:

LG Kaku
 

Michael...

Top Contributor
Grundsätzlich: Merkwürdiger Aufbau. Was hat es mit dem if else in der Methode anzeige() auf sich?

Ausserdem sollte in dem Thread nur der anzuzeigende Wert geändert werden. Du allerdings nutzt hier eine zusätzliche TextArea und fügst und entfernst diese aus dem Panel. Warum?

Wenn der Thread eine Referenz auf die entsprechende Textkomponente besitzt, dann reicht ein einfaches setText("neuerText2") in der run aus.
 

Kakulukiam21

Aktives Mitglied
Hey,

Eigentlich ist es nur eine if() Abfrage ob der Thread schon gestartet ist. Wenn nicht soll er dies dann machen ;)

Zum Thema anzeigen:
Wie erstelle ich bitte eine Referenz zur TextArea? Ich kann in der run() Methode doch nix übergeben oder irre ich mich da?

EDIT

Ansich würde das ja reichen nur, woher soll ich jetzt genau diese eine TextArea hernehmen

Java:
public class DemoThread extends Thread {
	DBConnect cn = new DBConnect();
	int thread = 0;
	static boolean isRunning = false;

	public void run() {
		do {
			try {
				sleep(1000);
			} catch (InterruptedException e) {
			}
			temperatur_AT1
					.setText(Double.toString(cn.getSollTemperaturMilch()));
			System.out.println();
		} while (thread == 0);
	}

}
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Ansich würde das ja reichen nur, woher soll ich jetzt genau diese eine TextArea hernehmen

Java:
public class DemoThread extends Thread {
	DBConnect cn = new DBConnect();
	int thread = 0;
	static boolean isRunning = false;

	public void run() {
		do {
			try {
				sleep(1000);
			} catch (InterruptedException e) {
			}
			temperatur_AT1
					.setText(Double.toString(cn.getSollTemperaturMilch()));
			System.out.println();
		} while (thread == 0);
	}

}
Da zu kannst du ja in der Klasse einen Konstruktor implementieren, dem eine Referenz auf die TextArea übergeben werden kann.
 

Kakulukiam21

Aktives Mitglied
Da zu kannst du ja in der Klasse einen Konstruktor implementieren, dem eine Referenz auf die TextArea übergeben werden kann.

Dann würde das ja so aussehen:

Java:
//DemoThread Klasse
public DemoThread(JTextArea temperatur_AT1, JTextArea temperatur_AT2){
	temperatur1 = temperatur_AT1;
	temperatur2 = temperatur_AT2;
}

//------------------------------------
//Uebersicht Klasse
if (!DemoThread.isRunning) {
	DemoThread refreshTMP = new DemoThread(temperatur_AT1, temperatur_AT2);
	refreshTMP.start();
}

Und das wird nur einmal aufgerufen. Da ich aber auch noch eine andere Seite besuchen will und wieder auf diese Seite zurück komme wird wiederum nix angezeigt.
 

Kakulukiam21

Aktives Mitglied
was meinst Du mit "andere Seite besuchen" und warum sollte "nach dem Zurückkommen" nichts mehr angzeigt werden.

Ich meine damit das ich nicht nur die Seite "Uebersicht" habe, sondern zum Beispiel auch die Seite "Warnung"... Wenn ich jetzt auf die Seite "Uebersicht" gehe funktioniert alles super. Dann bin ich aber auch fertig damit und gehe zur Seite "Warnung", dort schaue ich mich dann ein bisschen um und entscheide dann wieder auf Seite "Uebersicht" zu gehen um die Temperatur im Blick zu haben, sie wird DANN aber nicht angezeigt.
 

Michael...

Top Contributor
Ich meine damit das ich nicht nur die Seite "Uebersicht" habe, sondern zum Beispiel auch die Seite "Warnung"...
OK, z.B. mittels CardLayout zwischen den Ansichten wechseln oder verwendest Du ein JTabbedPane?
Wenn ich jetzt auf die Seite "Uebersicht" gehe funktioniert alles super. Dann bin ich aber auch fertig damit und gehe zur Seite "Warnung", dort schaue ich mich dann ein bisschen um und entscheide dann wieder auf Seite "Uebersicht" zu gehen um die Temperatur im Blick zu haben, sie wird DANN aber nicht angezeigt.
Da scheint ein grundlegender Fehler im Design/ der Konzeption vorzuliegen. Kann es sein, dass beim Wechsel, z.B. neue Objekte / Komponenten erzeugt werden?
 

Kakulukiam21

Aktives Mitglied
OK, z.B. mittels CardLayout zwischen den Ansichten wechseln oder verwendest Du ein JTabbedPane?

das Böse null-Layout. Ich muss Buttons spezifisch anpassen und ein Layout ist in dem Fall noch zu statisch ;) Überlegungen auf JTabbedPane zu wechseln laufen.

Da scheint ein grundlegender Fehler im Design/ der Konzeption vorzuliegen. Kann es sein, dass beim Wechsel, z.B. neue Objekte / Komponenten erzeugt werden?

Das wird gemacht, da ich die Seite ja jedes mal neu aufbauen muss wenn ich sie verlassen habe oder etwa nicht? Ich häng da grad fest ;(
 

Michael...

Top Contributor
und ein Layout ist in dem Fall noch zu statisch ;)
Da habe ich eher gegenteilige Erfahrungen gemacht
Das wird gemacht, da ich die Seite ja jedes mal neu aufbauen muss wenn ich sie verlassen habe oder etwa nicht? Ich häng da grad fest ;(
Wenn eine "Seite" bereits existiert bzw. aufgebaut ist, dann kann man diese doch wieder "verwenden"

In Deinem Fall "verlierst" Du daher wohl die Referenzen bzw. hälst Referenzen auf "falsche" Objekte.
 

Michael...

Top Contributor
Und wie kann ich diese dann wieder verwenden?
Schwierig zu sagen, da man Dein Applikationsdesign und Klassenaufbau nicht kennt. Vermutlich lässt Dein Aufbau das nur schwer oder gar nicht zu.
Mit einem CardLayout/JTabbedPane (auch hier kann man Komponenten mit Null Layout reinstecken) erzeugt man das Layout bzw. die Komponente und steckt diese ins Layout bzw. in die Pane. Beim Ansichtenwechsel werden diese Komponenten dann "automatisch" wieder verwendet.

Aber auch wenn Du Dein Layout selbst aufbaust, hast Du doch für jede Ansicht ein JPanel, die Du abwechselnd anzeigen könntest. Mir ist nicht klar warum Du die Komponenten jedes Mal neu erstellst. Das ist doch ein Vorteil der OOP, dass man Objekte erstellt, verwendet und "wieder"verwendet.
 

Kakulukiam21

Aktives Mitglied
Aber auch wenn Du Dein Layout selbst aufbaust, hast Du doch für jede Ansicht ein JPanel, die Du abwechselnd anzeigen könntest. Mir ist nicht klar warum Du die Komponenten jedes Mal neu erstellst. Das ist doch ein Vorteil der OOP, dass man Objekte erstellt, verwendet und "wieder"verwendet.


Klar habe ich ein Panel, ich denke mein Fehler war es das Panel wieder zu löschen anstatt es einfach unsichtbar zu machen ;)
 

Michael...

Top Contributor
Mal eine Demo zu Threads und CardLayout:
Java:
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class CardLayoutThreadDemo extends JPanel {
	
	public static void main(String[] s) {
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setBounds(0, 0, 300, 200);
		frame.setLocationRelativeTo(null);
		
		frame.add(new CardLayoutThreadDemo());
		frame.setVisible(true);
	}
	
	private CardLayout layout;
	
	public CardLayoutThreadDemo() {
		layout = new CardLayout();
		this.setLayout(layout);
		
		ActionListener listener = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				layout.show(CardLayoutThreadDemo.this, e.getActionCommand());
			}
		};
		
		this.add(new AnyView(listener, "UPDATE_VIEW"), "ANY_VIEW");
		this.add(new UpdateView(listener, "ANY_VIEW"), "UPDATE_VIEW");
	}
	
	class UpdateThread implements Runnable {
		private JLabel label;
		
		public UpdateThread(JLabel label) {
			this.label = label;
		}
		
		public void run() {
			while(true) {
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				if (label.isShowing()) {
					label.setText("" + System.currentTimeMillis()/1000);
					System.out.println("Label aktualisiert: " + System.currentTimeMillis()/1000);
				}
			}
		}
	}
	
	class UpdateView extends JPanel {
		public UpdateView(ActionListener listener, String command) {
			this.setLayout(new BorderLayout());
			JButton button = new JButton("zum AnyPanel");
			button.setActionCommand(command);
			this.add(button, BorderLayout.SOUTH);
			button.addActionListener(listener);
			
			JLabel label = new JLabel("ToBeUpdated", JLabel.CENTER);
			this.add(label, BorderLayout.CENTER);
			
			new Thread(new UpdateThread(label)).start();
		}
	}
	
	class AnyView extends JPanel {
		public AnyView(ActionListener listener, String command) {
			this.setLayout(new BorderLayout());
			JButton button = new JButton("zum UpdatePanel");
			button.setActionCommand(command);
			this.add(button, BorderLayout.SOUTH);
			button.addActionListener(listener);
		}
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Java Probleme - java.lang.Thread.run(Unkown Source) Allgemeine Java-Themen 10
S Thread-Probleme Allgemeine Java-Themen 6
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
S Umstellung von File auf Path - Probleme mit Stream Allgemeine Java-Themen 5
C Probleme mit javax.mail.Session Allgemeine Java-Themen 8
M tomcat probleme Allgemeine Java-Themen 1
N Division macht Probleme Allgemeine Java-Themen 14
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
MarvinsDepression Probleme mit relativem Dateipfad Allgemeine Java-Themen 1
G Geotools Probleme nach PC-Wechsel Allgemeine Java-Themen 6
nibe1501 GUI Probleme Allgemeine Java-Themen 16
C Probleme mit dem WindowBuilder Allgemeine Java-Themen 3
P Selenium . Probleme ein Iron Icon Element anzusprechen Allgemeine Java-Themen 2
B Compiler-Fehler Probleme beim Kompilieren mit Jsoup Allgemeine Java-Themen 8
K VisualVM Profiling Remote Probleme Allgemeine Java-Themen 1
O Leerzeichen und Umlaute im Pfad einer Java Applikation machen Probleme Allgemeine Java-Themen 13
M Probleme bei Eclipse wenn ich entpacke Allgemeine Java-Themen 15
D Regex Probleme Allgemeine Java-Themen 2
M Probleme jar datei. Allgemeine Java-Themen 2
L Vererbung Verständnis Probleme Vererbung Allgemeine Java-Themen 2
Dann07 Probleme mit OpenAL Allgemeine Java-Themen 0
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
V Compiler-Fehler Online Compiler Probleme Allgemeine Java-Themen 4
M Probleme mit Negamax-Algorithmus Allgemeine Java-Themen 29
M Probleme mit BigDecimal Allgemeine Java-Themen 1
T Probleme mit NumberFormat Allgemeine Java-Themen 5
J Probleme exe-Start mit Task Scheduler Allgemeine Java-Themen 1
B Input/Output Probleme beim Ausführen von Shell-Befehlen mit Java Allgemeine Java-Themen 28
J Probleme beim einbinden von Zip4j library Allgemeine Java-Themen 6
F Variablen Palindromzahl (Probleme mit Methode) Allgemeine Java-Themen 9
K Data Konverter - Probleme mit Byte[] Kodierung Allgemeine Java-Themen 3
T Probleme mit dem Pfad zum Propertie file Allgemeine Java-Themen 7
H Swing HashMap zu Tabelle macht mir Probleme Allgemeine Java-Themen 4
Neoline Interpreter-Fehler Probleme mit Arrays.toString Allgemeine Java-Themen 7
F SQLite mit Java / Probleme beim INSERT Befehl Allgemeine Java-Themen 4
J Erste Schritte Probleme mit der Hauptklasse Allgemeine Java-Themen 14
J Tetris Probleme bei Klassen Allgemeine Java-Themen 14
J MinMax VierGewinnt Probleme Allgemeine Java-Themen 22
J Probleme mit CodeCoverage und Lombok Equals Allgemeine Java-Themen 1
S Eclipse Probleme beim Implementieren / Ausführen von jUnit 5-Test Suites Allgemeine Java-Themen 14
R Snake Probleme Allgemeine Java-Themen 2
A Probleme beim Verstehen einer Aufgabenstellung Allgemeine Java-Themen 11
RalleYTN 3D Objekt Translation basierend auf Rotation (Probleme mit Z Rotation) Allgemeine Java-Themen 0
Bluedaishi Druck Probleme mit PDF dateien Allgemeine Java-Themen 4
G Ant Probleme bei einer Installation die Apache ant+ivy verwendet Allgemeine Java-Themen 14
E TableView Probleme Allgemeine Java-Themen 7
perlenfischer1984 Probleme beim Mocken Allgemeine Java-Themen 6
S Kaffemaschine Programmierung Probleme Allgemeine Java-Themen 2
K Threads Runtime und Process Probleme Allgemeine Java-Themen 3
S Probleme mit unterschiedlichen Java-Versionen (Mac OS X 10.11) Allgemeine Java-Themen 0
S Event Handling keyPressed()-Probleme Allgemeine Java-Themen 2
VfL_Freak Große und seltsame Probleme nach Java-Update auf V1.8.0_91 Allgemeine Java-Themen 3
P Probleme mit Grafik (Java) Allgemeine Java-Themen 6
R probleme beim starten von jar unter linux Allgemeine Java-Themen 2
H Probleme mit DAY_OF_WEEK Allgemeine Java-Themen 4
Arif Probleme mit NullPointerException Allgemeine Java-Themen 2
E Probleme mit nextInt() und Exception Allgemeine Java-Themen 35
Streeber Probleme mit AWT-EventQueue: ArrayList Elemente hinzufügen Allgemeine Java-Themen 1
D Performance-Probleme mit Joda-Time Allgemeine Java-Themen 3
M Probleme beim rechnen, bei Zahlen mit führenden Nullen. Allgemeine Java-Themen 7
RalleYTN Probleme mit Encrypting Allgemeine Java-Themen 10
M Probleme mit Schriftarten PDFBox Allgemeine Java-Themen 3
J Probleme mit der Java-Runtime Allgemeine Java-Themen 10
G Probleme mit BufferedWriter und URL Allgemeine Java-Themen 4
S Probleme mit meinem MacBook Pro DRINGEND HILFE erbeten! Allgemeine Java-Themen 17
Androbin Interpreter-Fehler Probleme mit Rekursion - StackOverflowError Allgemeine Java-Themen 8
E JCuda-0.6.5 Probleme beim ausführen der Datei Allgemeine Java-Themen 0
M Runtime.exec() verursacht auf manchen Systemen Probleme - Ursache unklar Allgemeine Java-Themen 2
W JNDI - LDAP - Probleme beim editieren von Usern Allgemeine Java-Themen 0
R DBUnit Performance Probleme Allgemeine Java-Themen 0
S Probleme mit Collection Allgemeine Java-Themen 7
L Probleme mit Jar Allgemeine Java-Themen 6
N Zahlensysteme umrechnen; Probleme beim Umwandeln Allgemeine Java-Themen 4
K OOP OOP Gui Spiel + Vererbungen Probleme durch Nichtwissen!! Allgemeine Java-Themen 1
F Java Native/Shared Library (.so) laden macht Probleme Allgemeine Java-Themen 3
J Synchronized Probleme Allgemeine Java-Themen 7
J Java Progressbar & Download Probleme Allgemeine Java-Themen 10
S Probleme mit dem filechooser Allgemeine Java-Themen 1
J Comperator Probleme Allgemeine Java-Themen 4
A Probleme beim auslesen von Quelltext (HTML) Allgemeine Java-Themen 5
S Probleme mit Webappplikation Allgemeine Java-Themen 5
L Plötzlich Probleme mit der JVM :( Allgemeine Java-Themen 6
S starke performance probleme des forums Allgemeine Java-Themen 10
K Probleme bei Berechnung der Komplexität Allgemeine Java-Themen 7
R JRE Ablaufdatum seit 7u10 - Probleme bei selbst ausgelieferter JRE bekannt? Allgemeine Java-Themen 3
H Reg Exp Probleme Allgemeine Java-Themen 5
M Classpath Probleme bei JAR Generierung Allgemeine Java-Themen 2
S Probleme mit JAVA-Installation Allgemeine Java-Themen 3
D Probleme bei for-Schleife Allgemeine Java-Themen 4
R Probleme mit Javadoc Allgemeine Java-Themen 2
G Gson Probleme Allgemeine Java-Themen 2
P KI für TicTacToe programmieren > Probleme Allgemeine Java-Themen 2
M Google App Engine macht Probleme Allgemeine Java-Themen 4
H Probleme mit finally-Block und close() Allgemeine Java-Themen 4
F 2d array probleme Allgemeine Java-Themen 2
M 3D-Grafik Probleme beim drehen von Objekten Allgemeine Java-Themen 9
T Interface Probleme Allgemeine Java-Themen 8
C Eclipse Probleme bei selbst erstelltem Algorithmus Allgemeine Java-Themen 2
M Probleme mit String in Label übergeben. Allgemeine Java-Themen 6
H MediaManager Fragen/Probleme Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben