Mit 2 Klassen auf selben Thread zugreifen

Status
Nicht offen für weitere Antworten.

tobi193

Aktives Mitglied
Hallo,
ich habe ein vermutlich recht banales Problem, aber kann es auch mit Hilfe von Google nicht lösen.
Ich habe eine Klasse test und eine test2. In der Test wird erfolgreich auf den Thread steuern zugegriffen. Nun möchte ich aber in test2 Werte eingeben, die dann an den Thread gesendet werden und somit an test weitergegeben werden. Aber das klappt nicht.
Wie kann ich mit beiden auf das selbe Objekt zugreifen ? So erstelle ich ja für jede Klasse ein eigenes.

Das ganze sieht so aus:
Java:
  public class test {

    public static void main(String args[]) {
      steuern s;

      s = new steuern();
      s.start();
      
      while(s.getAktiv()){
        s.run();
        System.out.println(s.getQuer());
      }
    }
  }
Java:
  public class test2 {

    public static void main(String args[]) {
        steuern s;

      s = new steuern();
      s.start();
      for(int i = 1; i < 15; i++){
         s.setQuer(Tastatur.liesInt());
      }
    }
  }
Java:
class steuern extends Thread {

    private int quer;
    private boolean aktiv;
    
    public void run() {
       if(quer > 3){
        quer = quer + 5;
       }
    }
    
    public int getQuer(){
       return quer;
    }
    
    public void setQuer(int q){
       quer = q;
    }
    
    public boolean getAktiv(){
      return aktiv;
    }
}

Tastatur.liesInt() ist übrigens eine Klasse meiner Schule, die ließt einfach einen Int-Wert vom Nutzer aus.

Gruß tobi

Edit: Ups, falsches Forum.
 

Dissi

Aktives Mitglied
Hallo Tobi,
du hast hier mehrere Probleme.

Zum einen, du kannst nur eine "Main" Methode starten und müsstest von dieser aus die andere starten. Zudem erstellst du von deiner Klasse steuern (die Groß geschrieben werden muss) 2 extra Instanzen und haben somit keinen Bezug zueinader.

Generell gilt aber, dass wenn du von mehreren Instanzen auf den gleichen Thread zugreifen willst, solltest du dir "synchronized Threads" anschauen.

Java Quick Reference - Threads - synchronized keyword

Leider auf Englisch.
Google einfach mal, gibts sicher auch auf Deutsch.

MFG
 

tobi193

Aktives Mitglied
Hallo,
also inzwischen hat sich das Problem etwas geändert, aber ich bekomme es noch immer nicht hin.
Ein Thread (zeit) wird in der Mainklasse (rechnen) initialisiert und gestartet. Dann zählt der Thread sekündlich eins höher. Nun kann ich ja problemlos über die get Methode die Zeit abrufen, aber ich möchte in der Hauptklasse ein Feld haben, welches ständig die aktuelle Zeit zeigt.

Wie kann ich also vom Thread aus in der Hauptklasse direkt in ein Textfeld schreiben ?

Mit den synchronized Threads habe ich mich schon beschäftigt, aber nichts erreicht.

Java:
public class zeit extends Thread{
  private int zeit;
  public void run(){
     zeit = 0;
     while(true){
         try{
           sleep(1000);
         }catch(InterruptedException e){
         }
         zeit++;
     }
  }  
  public String getZeit(){
    return zeit + "";
  }
    public void zuruecksetzen(){
    zeit = 0;
  }
}

Java:
public class rechnen extends JFrame{
...
 JLabel rechnung = new JLabel("");
 zeit z = new zeit();

...
   public rechnen(){
   super("Rechentest");
   this.setLayout(new GridLayout(5,1,5,5));
   this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   this.add(rechnung);
   ...
   }

  public static void main(String[] args) {
   rechnen bla = new rechnen();
  }
}
 

Michael...

Top Contributor
Deine Klasse zeit (Klassennamen sollten mit einen Großbuchstaben beginnen) benötigt Zugriff auf das Label rechnung oder die Instanz von rechnen. Du musst also dem Thread das entsprechende Objekt übergeben (z.B. im Konstruktor oder per set()) dann kannst Inhalt des Labels in der while Schleife aktualisieren.
Gewöhnlich implementiert man das Interface Runnable anstatt von Thread zu erben.
 

tobi193

Aktives Mitglied
Also, ich habe mal so begonnen:
JLabel rechnung = new JLabel();
zeit z = new zeit(rechnung);


Und in der Zeit.java:

public zeit(JLabel rechnung){

}

Ich stehe grad auf dem Schlauch, wie geht es jetzt weiter ?
 

Michael...

Top Contributor
Java:
public class zeit ...
    private JLabel label;
    ...
    public zeit(JLabel rechnung) {
        this.label = rechnung;
    }

    public void run() {
        ...
        while(true) {
            ...
            label.setText(++zeit);
        }
    }...
Und was mir gerade auffällt: eine Variable (zeit) genauso wie eine Klasse (zeit) zu benennen ist nicht so geschickt, erst Recht wenn man entgegen der Kovention Klassennamen klein schreibt.
 

Dissi

Aktives Mitglied
schreib dir einen Setter (in der GUI Klasse) für den Text auf dem Label
Java:
setTextOnLabel(String anzeigeText){label.setText(anzeigeText)}

Diese Methode kannst du dann in deiner zählschleife aufrufen und den wert reinschreiben. Dazu müsstest du eine Referenz von dem GUI an das Model geben. Find das alles zwar bisschen unschön, aber sollte deinem Zweck gerecht werden. Bevor du deine Codesmells nich refactort hast, sag ich gar nix mehr :p
 
Zuletzt bearbeitet:

tobi193

Aktives Mitglied
Vielen Dank für eure Hilfe, jetzt läuft das ganze soweit.
Aber nun bin ich schon am nächsten Problem. Ich will den Thread anhalten und später wieder weiterlaufen lassen.
Mit interrupt hat das so gar nicht funktioniert, also habe ich mir 2 Methoden geschrieben:
Java:
...
  private boolean laufen;
...
 public void run(){
     zeit = 0;
     do{
         try{
           sleep(1000);
         }catch(InterruptedException e){
         }
         zeit++;
         if(laufen){
           label.setText(" Zeit: " + zeit);
         }
     }while(laufen);
  }
...  
  public void anhalten(){
    laufen = false;
  }
  public void weitermachen(){
    laufen = true;
  }

Das Anhalten klappt prima. Nur weitermachen will er nicht.
Gruß tobi
 

Michael...

Top Contributor
sobald "laufen" auf false gesetzt wird, läuft der Thread aus der while Schleife und stirbt.
Von was hängt es denn ab, ob die Zeitanzeige aktualisiert werden soll oder nicht, die Zeit selbst soll weiter laufen, wenn ich das richtig deute??
 

tobi193

Aktives Mitglied
Naja, in dem Fall soll die Zeit nicht unbedingt weiterlaufen. Danach fängt der Zähler wieder bei 0 an.
Aber ich würde für zukünftige Projekte schon gerne mal wissen wie man korrekt stoppen und weiterlaufen lassen kann.
 

Dissi

Aktives Mitglied
So wie du, macht man es richtig : ) und bei google gibt es massig beispiele wie man threads nur anhält. Schau dir die Beispiele an und versuchs. Learning by doing!
 

Michael...

Top Contributor
Wenn der Zähler sowieso wieder bei 0 anfangen soll, macht es eher Sinn einen neuen Thread zu starten, als einen bestehenden "am Leben" zu halten und später wieder weiterlaufen zu lassen.
Um einen Thread pausieren zu lassen, gibt es die Möglichkeit wait() an einem dem Thread bekannten Objekt aufzurufen. Das Objekt kann dann später per notify() bzw. notifyAll() den wartenden Thread wieder weiterlaufen lassen. Mit diesen Schlüsselwörtern sind sicherlich ein paar Bsp. zu finden.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Mehrere Klassen mit den selben Daten Allgemeine Java-Themen 5
Zrebna Wie ermittelt man alle testbaren (zu testenden) Klassen in seinem Maven-Projekt? Allgemeine Java-Themen 23
8u3631984 Jacoco Testcoverage bei Abstracten Klassen in verschachtelten Modulen Allgemeine Java-Themen 6
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
P9cman java.Lang Klassen fehlen in JRE System Library Allgemeine Java-Themen 1
B Wie kann ich mein 8 Klassen Gebilde objektorientierter schreiben? Allgemeine Java-Themen 114
N abstracte klassen methoden Allgemeine Java-Themen 32
W Klassen Zugriff auf ein Textfile aus allen Klassen. Allgemeine Java-Themen 2
M Klasse durch Klassen Aufteilung verbessern, aber wo? Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
M Kann man Annotationen auf Klassen einschränken die ein Interface implementieren? Allgemeine Java-Themen 1
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
H Interface PluginSystem ClassNotFound exception für library Klassen Allgemeine Java-Themen 10
L Classpath Zur Laufzeit bestimmte Klassen in Classloader hinzufügen? Allgemeine Java-Themen 4
P Abstrakte Klassen vs. Interface Allgemeine Java-Themen 4
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
D OOP Gemeinsamen ID-Raum für zwei Klassen implementieren Allgemeine Java-Themen 7
B Problem mit meinen Klassen Allgemeine Java-Themen 6
I Array Parameter mit 2 Klassen - NullPointerException Allgemeine Java-Themen 3
F ArrayList`s in Klassen mit Getter/Setter Allgemeine Java-Themen 8
F Code in Klassen bringen Allgemeine Java-Themen 4
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
F Klassen Verwendung abstrakter Klassen Allgemeine Java-Themen 9
W Variablenübergabe über mehrere Klassen Allgemeine Java-Themen 4
B Vererbung Interface und implementierende Klassen Allgemeine Java-Themen 8
D Klassen JLabels in anderen Klassen verwenden. Allgemeine Java-Themen 7
H Klassen LibGDX - Verschiedene Klassen als Value in einer Map Allgemeine Java-Themen 8
J Best Practice Objekt an alle Klassen verteilen ( Discord Bot ) Allgemeine Java-Themen 7
A Anonyme Klassen - Interface Allgemeine Java-Themen 5
ReinerCoder auf Klassen innerhalb eines package zugreifen Allgemeine Java-Themen 22
J Tetris Probleme bei Klassen Allgemeine Java-Themen 14
cool_brivk24 Klassen Klassen Aufruf Fehlgeschlagen Allgemeine Java-Themen 14
S Parametrisierte jUnit 5-Tests mit eigenen Datentypen/Klassen-Objekten als Test-Parameter Allgemeine Java-Themen 0
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
S Klassen Abstrakte Klassen Allgemeine Java-Themen 5
T Log4J - Deaktivierung für einzelne Klassen Allgemeine Java-Themen 7
Tommy Nightmare Klassen Globale Klassen erstellen Allgemeine Java-Themen 7
X Klassen aus jar in jar Laden Allgemeine Java-Themen 1
S Klassen Klassen "virtuell" erstellen Allgemeine Java-Themen 5
J Aus mehreren Klassen ein Datei ausführbare machen Allgemeine Java-Themen 6
S equals-Methode bestimmer Klassen abfangen Allgemeine Java-Themen 2
M Klassen Eine Klasse in mehreren Klassen einbinden Allgemeine Java-Themen 11
Sin137 Struktur der Klassen & Package Allgemeine Java-Themen 2
G Klassen und interne Klassen Allgemeine Java-Themen 1
S Klassen übergeben Allgemeine Java-Themen 13
C Klassen und Konstruktor Allgemeine Java-Themen 2
S Classpath Wie kann ich Java-Library Klassen "verstecken"..? Allgemeine Java-Themen 4
A Java speech - 2 Klassen Allgemeine Java-Themen 1
V Wie kann ich die Fragen mit den anderen Klassen verbinden? Allgemeine Java-Themen 1
T Schlüsselworte mehrere public-Klassen in einem Paket Allgemeine Java-Themen 7
V Klassenname von allen Klassen mit einer bestimmten Eigenschaft bekommen Allgemeine Java-Themen 2
B Classpath Eclipse findet importierte Klassen nicht Allgemeine Java-Themen 1
C DBConnection als Methode in mehreren Klassen Allgemeine Java-Themen 4
C Arten von Klassen Allgemeine Java-Themen 3
7 Verbinden von Mehreren Klassen Allgemeine Java-Themen 29
A Klassen ein Interface aufzwingen Allgemeine Java-Themen 4
O Java-Obfuscator, welcher einzelne Methoden, Klassen und Ordnerstrukturen ausnehmen kann. Allgemeine Java-Themen 1
A also definition von klassen und string methoden und algorithmik Allgemeine Java-Themen 13
D Problem bei Vererbung abstrakter Klassen Allgemeine Java-Themen 6
M Interface Generische Klassen mit mehreren Typen überschreiben Allgemeine Java-Themen 0
L OOP Klassen-Design (static oder nicht?) Allgemeine Java-Themen 3
X Eigene Annotation - mit Bedingung für ganze Klassen oder Methoden Allgemeine Java-Themen 2
O Klassen Programm in Klassen unterteilt, werte werden nicht mehr übernommen Allgemeine Java-Themen 3
J C++ Projekt (QT) in Java mit Klassen (nicht imperativ) nutzen (BridJ? JavaCPP? SWIG? JNA? JNI?) Allgemeine Java-Themen 2
T Datentypen Eine Liste - verschiedenen Klassen - eine Abstracte Klasse Allgemeine Java-Themen 3
S .jar hat nicht alle Klassen ??? Allgemeine Java-Themen 10
S Polymorphie Polymorphismus bei Abstrakten Klassen Allgemeine Java-Themen 2
S Tool um mehrere Klassen in einer Klasse vereinen? Allgemeine Java-Themen 6
T Wie kann ich alle existierenden Java-Klassen anzeigen lassen? Allgemeine Java-Themen 10
Landei Welche Klassen fehlen im JDK? Allgemeine Java-Themen 18
S Kapselung Statische Helper Klassen Allgemeine Java-Themen 5
A Vererbung Klassen-Downcasting wirft ClassCastException Allgemeine Java-Themen 2
N Java Klassen mit ID Allgemeine Java-Themen 21
antonbracke Klassen Klassen gegenseitig laden Allgemeine Java-Themen 4
R SecurityManager für einzelne Klassen/Threads? Allgemeine Java-Themen 38
T Java Klassen aus externer .jar laden und ausführen Allgemeine Java-Themen 3
S JPA und Entity-Klassen: Wert ungültig Allgemeine Java-Themen 6
M OO / Klassen / Projektstruktur Allgemeine Java-Themen 5
O Klassen werden nicht importiert Allgemeine Java-Themen 3
E selber Klassen kompilieren/ prüfen Allgemeine Java-Themen 5
Z Abstrakte Klassen /Interface Allgemeine Java-Themen 5
A Klassen und JLabel's Allgemeine Java-Themen 12
J Java-Implementierung diverser Beziehungen zwischen Klassen bzw. Objekten Allgemeine Java-Themen 2
M Methoden/Klassen für andere Projekte Allgemeine Java-Themen 4
J Suche: Tool zum Auffinden gleichnamiger Klassen (Name und Package gleich) in unteschiedlichen JARs Allgemeine Java-Themen 5
E instanceof mit nicht öffentlichen Klassen Allgemeine Java-Themen 2
D Datentypen Typbestimmung unbekannter Wrapper-Klassen Allgemeine Java-Themen 5
S Klassen in einer Schleife durchlaufen Allgemeine Java-Themen 11
X Generic muss zwei Klassen/Interfaces erfüllen Allgemeine Java-Themen 5
N Vergleich eigener Klassen Allgemeine Java-Themen 5
M Klassen Array aus Klassen bestimmter Klassen ? Allgemeine Java-Themen 11
C OOP Klassen mit "Eigenschaften" Allgemeine Java-Themen 10
H Klassen kommunizieren lassen Allgemeine Java-Themen 3
A Problem bei Serialisierung von Bibliotheks-Klassen Allgemeine Java-Themen 6
R Implementierung eines Interface durch 2 verschiedene Klassen Allgemeine Java-Themen 6
T Classpath Klassen dynamisch erstellen Allgemeine Java-Themen 4
I Klassen Klassen-/Objektinteraktion Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben