Threads Thread aus verschiedenen Klassen ansprechen

lyjlq

Mitglied
Hallo Forum,

ich versuche grade ein Log Fenster zu erstellen. Dieses soll sich ständig Aktualisieren. Dafür habe ich ein Thread erstellt was ein Fenster erstellt und die ganze zeit auf Daten wartet.

In der Klasse LogMonitor erstelle ich das Fenster und mit der Methode updateLog wird die Anzeige mit neuen Daten bestückt und Aktualisiert.

Java:
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class LogMonitor extends JFrame 
{
	private static final long serialVersionUID = -7558310302119076680L;
	private JPanel logPanel = new JPanel();
	private JTextArea logText = new JTextArea();

	public LogMonitor(Boolean logAn) {
		super("Log Monitor");
		this.setBounds(600, 600, 400, 200);
		this.add(mainPanel());
		this.setVisible(logAn);
	}
	private JPanel mainPanel() {
		JPanel mainWindowPanel = new JPanel();
		mainWindowPanel.setLayout(new BorderLayout());
		mainWindowPanel.add(BorderLayout.CENTER,mainLogPanel());
		return mainWindowPanel;
	}
	private JScrollPane mainLogPanel() {
		JScrollPane scroll = new JScrollPane(logPanel);
		scroll.setCorner( JScrollPane.UPPER_RIGHT_CORNER, new JLabel("1", JLabel.CENTER));
		scroll.setCorner( JScrollPane.LOWER_RIGHT_CORNER, new JLabel("2", JLabel.CENTER));
		logText.setTabSize(80);
		logText.setWrapStyleWord(true);
		logText.setText("Start vom Log "+"\n");
		logPanel.add(logText);
		return scroll;
	}
	public void updateLog(String log) {
		logText.append(log);
		logText.append("\n");
		logPanel.repaint();
		System.out.println("was macht updateLog: "+log);
	}
}

In der Klasse LogController ist der Thread unter gebracht und alles um ihn Sichtbar und neue Texte die im Fenster angezeigt werden sollen gesetzt.

Java:
public class LogController implements Runnable
{
	  private String messageText = "Kassenbuch log Start.";
	  private Boolean logAn = false;
	  private Boolean logEnde = false;
	  private LogMonitor log = new LogMonitor(logAn);

	  public void setUpdateLog(String newText) {
	    messageText = newText;
	    log.updateLog(messageText);
	  }

	  public String getUpdateLog() {
	    return messageText;
	  }
	  
	  public void setLogAn(Boolean logAn) {
		  this.logAn = logAn;
		  log.setVisible(this.logAn);
	  }
	  
	  public Boolean getLogAn() {
		  return this.logAn;
	  }

	  public void run() {
		  do {
			  log.updateLog(this.getUpdateLog());
		  	  }
		  while (logEnde);
	 }
}

Und jetzt mein Problem: Wie kann ich das Laufende Thread aus x Klassen ansprechen um die Texte zu übergeben die im Fenster angezeigt werden sollen ohne das ich in jeder Klassen den LogContoller neu zu definieren und somit für jeder Klasse ein neues Thread mit neuen Fenster auf zu machen um die Texte aus dieser Kasse zu sehen.???:L

Unter Welchen Stichworten oder Links kann ich was nachlesen:rtfm:, oder Lösungsansatz.:bahnhof:

Danke
Gurß
LYJLQ
 
Zuletzt bearbeitet von einem Moderator:

TKausL

Top Contributor
Ich verstehe nicht, warum dein Log-Fenster nen eigenen Thread braucht. Würde nen Singleton-Logger schreiben wo alle Klassen dann ihren Senf direkt abgeben können ohne dass der thread ständig nachfragen muss.
 
S

SlaterB

Gast
jedes Objekt, welches x andere kennen sollen, muss an diese x übergeben werden,
oder etwas unsauber einfach statisch allgemein verfügbar sein,
so wie jeder System.out kennt um dort Methoden wie println() aufzurufen

das steht kaum als eigenes Thema in einem Buch, das ist eher etwas was man allgemein im Leben lernt ;)
 

lyjlq

Mitglied
Hallo Robokopp,

Danke für deine Antwort (auch an die beiden Anderen).
Ich glaube das ist alles noch was zu hoch für mich, weil ich anscheinend noch nicht versanden habe, was bei solchen Konstrukten passiert.

Java:
private static DestinationInterface destClass = null;

[TIPP]Das Stammt aus dem Beispiel was Robokopp im Tutorial hinterlegt hat.
Aus der Kalsse DataHandler[/TIPP]

Was zum Teuffell passiert da. Das verstehe ich nicht.

private :es ist nur Lokal zu sehen.
static :es ist für alle erreichbar?
DestinationInterface :warum ist das Namensgleich mit dem Interface
Greift es auf das Interface zu? Wie Warum?????
Wird das Interfache damit für alle sichtbar?
destClass = null : einer Variablen wird „null“ zugewiesen?

Ich hatte das Interface so verstanden, das es als Vorlage dient, damit man keine Metohde vergisst in der Klasse wo man das Interface Implementier. Die im Interface hinterlegten Metohden haben keinen Body.

Was hat eine abstacte Metohde in einem Interface zu suchen, da man ja keinen Body erstellen darf.
Und wieso wird Data wo ja rein nichts gemacht wird importiert. Oder greift die abstracte Metohde setData auf Data zu.

Wird den im in der lehren Klasse Data die Daten abgelegt. In diesen fall „null“?

Was habe ich im Prinzip richtig von Java verstanden.
Wo sind meine Lücken damit ich das verstehen kann.

Gruß

LYJLQ
 
Zuletzt bearbeitet:
P

Pippl

Gast
Java:
private static DestinationInterface destClass = null;

Ich hatte das Interface so verstanden, das es als Vorlage dient, damit man keine Metohde vergisst in der Klasse wo man das Interface Implementier. Die im Interface hinterlegten Metohden haben keinen Body.

Ja du hast das Interface schon richtig verstanden.
Kleines Beispiel:
Java:
public class PlaceHolder
{
    public static Saving saver = null;
}

public interface Saving
{
    void save();
}

public class DatabaseSaver implements Saving
{
   public void save()
   {
      //schreibe in die Datenbank
   }
}

public class FileSaver implements Saving
{
   public void save()
   {
      // schreibe ins file
   }
}

Java:
...
PlaceHolder.saver.save();
...

Du kannst so sicher sein, jedes Objekt welches du "saver" zuweißt bietet die Methode "save" an.
Was dann die Methode macht, ist Sache des jeweiligen Objekts
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
du hast komplizierten GUI-Code u.a. mit
> private JPanel logPanel = new JPanel();

aber
> private static DestinationInterface destClass = null;
ist jetzt was völlig neues, ein Buch mit sieben Siegeln?!
null ist nur ein andere Wert als ein Objekt, mal will halt (noch) kein bestimmtes hineinlegen
null Referenz Java Referenzen Java

wenn du static nicht verstehst, dann lasse es doch vorerst weg,
falls alles funktioniert war es wohl nicht so wichtig, falls du ein Problem hast kann man dann überlegen

eine Variablendeklaration mit einem Typ ist ziemlich ziemlich grundlegend..
 

Robokopp

Bekanntes Mitglied
Hallo Robokopp,

Danke für deine Antwort (auch an die beiden Anderen).
Ich glaube das ist alles noch was zu hoch für mich, weil ich anscheinend noch nicht versanden habe, was bei solchen Konstrukten passiert.

Java:
private static DestinationInterface destClass = null;

Was zum Teuffell passiert da. Das verstehe ich nicht.

private :es ist nur Lokal zu sehen.
static :es ist für alle erreichbar?
DestinationInterface :warum ist das Namensgleich mit dem Interface
Greift es auf das Interface zu? Wie Warum?????
Wird das Interfache damit für alle sichtbar?
destClass = null : einer Variablen wird „null“ zugewiesen?

private bedeutet, der Zugriff auf destClass ist nur innerhalb dieser Klasse möglich
static bedeutet, dieses Objekt "destClass" ist immer verfügbar, auch wenn du zuvor kein Objekt von der Klasse DataHandler erzeugt hast. Damit gehe ich sicher, dass die Klasse das Zielobjekt kennt.

Angenommen, dort würde stehen public static Object obj=new Object();
dann könnte ich einfach auf dieses statische Objekt zugreifen per DataHandler().obj, weil dieses obj existiert, auch wenn es kein Objekt von DataHandler gibt. Es liegt also einfach in diesem "Klassencontainer".

Ein anderes Beispiel wäre, wenn du zählen willst, wieviele Objekte einer Bestimmten Klasse erzeugt wurden.Dafür legst du einfach in der Klasse eine statische Countervariable an und zählst im Konstruktor um 1 hoch. Diese eine Variable existiert so für jedes Objekt.

das null hätte ich genauso gut weglassen können, denn solange destClass noch kein Objekt zugewiesen wurde, ist es automatisch Null.

Ich hatte das Interface so verstanden, das es als Vorlage dient, damit man keine Metohde vergisst in der Klasse wo man das Interface Implementier. Die im Interface hinterlegten Metohden haben keinen Body.

Was hat eine abstacte Metohde in einem Interface zu suchen, da man ja keinen Body erstellen darf.
Und wieso wird Data wo ja rein nichts gemacht wird importiert. Oder greift die abstracte Metohde setData auf Data zu.

Mit Interfaces will man sichergehen, dass eine Klasse die gewünschten Methoden einer Schnittstelle auch garantiert implementiert. Das Interface sorgt in dem Fall dafür, dass deine Zielklasse garantiert eine setData(Data data) Methode enthalten wird. Daher auch die Variable private static DestinationInterface destClass=null;

Damit muss das Zielklassenobjekt, dass an die HandlerKlasse übergeben wird auf jeden Fall das Interface implementiert haben, sonst geht es nicht.

Das abstract kann man wegmachen.
Kann sein dass das vorher kein Interface sondern eine abstrakte Klasse war und ich dann auf die Idee gekommen bin dass vielleicht die Zielklasse schon von irgendwas anderem erbt, beispielsweise JPanel. Ja ich glaub so war es.
 

lyjlq

Mitglied
Danke an alle,

SlaterB hat gesagt.:
du hast komplizierten GUI-Code u.a. mit
> private JPanel logPanel = new JPanel();

Handbuch gelesen verstehen Nachvollziehen Begreifen. Es hat Klick gemacht (Hoffendlich richtig).

SlaterB hat gesagt.:
private static DestinationInterface destClass = null;
ist jetzt was völlig neues, ein Buch mit sieben Siegeln?!

Jedes einzelne teil im Handbuch gelesen :rtfm: verstanden und Nachvollzogen Begreifen.
So eine Kombination habe ich nie in den Handbüchern wahrgenommen. ???:L

destClass = null : einer Variablen wird „null“ zugewiesen?

Hier habe ich wohl ein ? zufiel gesetzt. :autsch:

Pippl hat gesagt.:
Ja du hast das Interface schon richtig verstanden.
Kleines Beispiel:

Und es macht aaaaahhhh, aber wie kann man DatabaseSaver oder FilesSaver den jetzt ansprechen,
so das sie ausgeführt werden? :(
 
S

SlaterB

Gast
irgendjemand legt ein richtiges Objekt in die Variable, welcher Art ist egal,
der Aufruf der save()-Methode geht dann, wird intern korrekt zum Objekt, zur Klasse, zum Code der richtigen save-Methode weitergeleitet
 

lyjlq

Mitglied
irgendjemand legt ein richtiges Objekt in die Variable, welcher Art ist egal,
der Aufruf der save()-Methode geht dann, wird intern korrekt zum Objekt, zur Klasse, zum Code der richtigen save-Methode weitergeleitet

Hi SlaterB,

schön gesagt. Aber irgendwie scheine ich auf einen Abstellgleis gelandet zu sein.:bahnhof:

Also ich nehme FileSaver und will das es nur txt Ausgeben soll.
Java:
	   System.out.println(txt);

Von welchen Objekt und Variable redest Du wie werden die Angesprochen.
Ich denke (kann ich das?), ich ahne wie das läuft.
Aber ich habe keine Idee wie der Syntax aus sehen kann. :bahnhof:
 
S

SlaterB

Gast
Methoden werden an Objekten aufgerufen,
von der Klasse FileSaver ein Objekt zu erstellen usw. ist der normale Standardfall, da kann es wohl keine Frage geben,
(ist bisher natürlich nur ein abstraktes Beispiel, kein Code vorhanden, kein Paramete für txt vorhanden usw.)

du kannst das FileSaver-Objekt aber auch in der Variable vom Typ des Interfaces ablegen,
und dann immer noch save() aufrufen, ohne (bei dieser Variable) zu wissen, welche Klasse genau es ist,

durch das Interface ist sichergestellt dass die Methode vorhanden ist, also ist sie aufrufbar, fertig
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
L Compiler-Fehler Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben