OOP Klassen Methoden Rückgabewert

V

vandewey87

Gast
Hello!

Der Inhalt eines JPanels von der Klasse AufbauProg wird durch einen Rückgabewert von der Klasse OnOfflineTest mit setText geändert.
Hab ein Problem mit der Rückgabe von diese Zeile zustandonoff = ping.sentDaten();
Der Rückgabewert is immer false - bei Aufruf von sent Daten wird x1 immer false gesetzt... (Schuld Variablendeklaration in Klasse!?)
x1 - in der Run Methode hat immer den richtigen Zustand


Java:
public class AufbauProg extends JPanel {
OlineOfflineTest ping = new OlineOfflineTest();
public void ErzeugeFenster(){
Timer timer = new Timer();
timer.schedule (new OlineOfflineTest(), 0,2000);
}

public void getDaten()
{
  zustandonoff = ping.sentDaten();!!!!!!!!!!!!!

  System.out.println("!!!!!zustandoff!!!!!"+zustandonoff); 

  if(zustandonoff==true)
  {ON.setText("OFFLINE");System.out.println("\n"+"ROT1"+zustandonoff);
  }
  else if(zustandonoff==false)
  {ON.setText("ONLINE");System.out.println("\n"+"Green1"+zustandonoff);
  }
}


Java:
public class OlineOfflineTest extends TimerTask
{

boolean x1=true;
boolean x;

public void run()
{
    x1 = getDaten();
    System.err.println("11111111111111111111"+x1);
}

public boolean sentDaten()
{   
    System.err.println("222222222222222222222"+x1);
    return x1;           !!!!!!!!!!!!!!!!!!
}

public boolean getDaten()
{
   try {
       InetAddress address1 = InetAddress.getByName("www.timetoparty.at");
       try{
        if(address1.isReachable(1500))
            {
        x=true;
           }
        else{
        x=false;
        }
         }catch (IOException e) {
       System.err.println("Unable to reach www.timetoparty");}

      }
     catch (UnknownHostException e) {
       System.err.println("Unable to lookup www.timetoparty1");

     }
     catch (IOException e) {
       System.err.println("Unable to reach www.timetoparty2");
     }
  
  return x;
}



}
 
V

vandewey87

Gast
Sry, Eintrag ist mir doppelt "rausgerutscht"!

Ja Inet Verbindung ist vorhanden bzw. trenne ich sie physikalisch zum Testen!

Die run Methode gibt mir den richtigen wert aus jedoch die sent Daten() - nach Aufruf nicht aus und nicht in die andere klasse
nach Methodenaufruf zurück!

Java:
public void run()
{
    x1 = getDaten();
    System.err.println("11111111111111111111"+x1);
}
 
public boolean sentDaten()
{   
    System.err.println("222222222222222222222"+x1);
    return x1;           !!!!!!!!!!!!!!!!!!
}
 
S

SlaterB

Gast
timer.schedule (new OlineOfflineTest(), 0,2000);

->

timer.schedule (ping, 0,2000);
 
V

vandewey87

Gast
Danke den aufruf hab ich jetzt geändert!
Wenn die Methode in der Klasse AufbauProg aufrufe stimmt der Rückgabewert jetzt -
wenn ich sentDaten() aber über die OnOffline Methode aufrufe hauts wieder nicht hin
Java:
public void run()
{   
    x1 = getDaten();
    System.err.println("11111111111111111111"+x1);

    AufbauProg aktualisiere = new AufbauProg();
    aktualisiere.getDaten();
}

public boolean sentDaten()
{   
    System.err.println("222222222222222222222"+x1); 
    return x1;
}
 
S

SlaterB

Gast
was ist denn 'die OnOffline Methode'?
und was ist der neue Code-Ausschnitt, ist das die geänderte OlineOfflineTest-Klasse?

ziemlich gefährliche Rekursion, die du dann einbaust:
ein AufbauProg erzeugt ein OlineOfflineTest, darin wird ein neues AufbauProg erzeugt, welches dann wieder OlineOfflineTest erstellt, wieder AufbauProg usw. bis in alle Ewigkeit

----

hast du meinen ursprünglichen Hinweis auch verstanden oder nur kopiert?
jetzt hast du bestimmt wieder denselben Fehler,
wenn du verschiedene Objekte erzeugst, ist in einem vielleicht x1 = true gesetzt, in anderen aber nicht,

baue in deine System.out.println noch +hashCode() ein, dann siehst du jeweils, welches Objekt aktuell untersucht wird
 
V

vandewey87

Gast
Hoff ich hab das verstanden, aber das unendlich ist gewollt OnOfflineTest
soll mit an die AufbauProg immer einen Wert zurückgeben der Anzeigt ob
das Programm online ist oder nicht....

Wenn ich mit dem Button in der selben Klasse die Methode aurfufe funktiniert die ON/Off änderung...
hoff hab jetzt die wichtigen Infos gebracht!?

Java:
-
public class OlineOfflineTest extends TimerTask
{

public boolean x1=true;
private boolean x;

public void run()
{   
    x1 = getDaten();
    System.err.println("11111111111111111111"+ x1+hashCode());
    AufbauProg aktualisiere = new AufbauProg();
    aktualisiere.getDaten();
}

public boolean sentDaten()
{   
    System.err.println("222222222222222222222"+ x1+hashCode());
    return x1;
}

public boolean getDaten()
{
   try {
       InetAddress address1 = InetAddress.getByName("www.timetoparty.at");
       try{
        if(address1.isReachable(1500))
            {
        x=true;
           }
        else{
        x=false;
        }
         }catch (IOException e) {
       System.err.println("Unable to reach Server");}

      }
     catch (UnknownHostException e) {
       System.err.println("Unable to lookup Server");

     }
     catch (IOException e) {
       System.err.println("Unable to reach Server");
     }
 
  return x;
}
}


Java:
public class AufbauProg extends JPanel {

public void getDaten()
{
  zustandonoff = ping.sentDaten();
  System.out.println("!!!!!zustandoff!!!!!"+ zustandonoff); //immer false obwohl bei onffstatus OK
  if(zustandonoff==true)
  {ON.setText("OFFLINE");System.out.println("\n"+"ROT1"+zustandonoff);
  }
  else if(zustandonoff==false)
  {ON.setText("ONLINE");System.out.println("\n"+"Green1"+zustandonoff);
  }
}

public void AddActionListenerMethod(){

ActionListener al = new ActionListener() {
@Override public void actionPerformed( ActionEvent e ) {   
    aufruf.LadeBilder("Erdgeschoß");
    getDaten();
}
};
Knopf.addActionListener( al );

}
 
S

SlaterB

Gast
diesmal hast du bei AufbauProg den früheren Code ErzeugeFenster() usw. weggelassen, das ist hinderlich weil ich nicht weiß,
was du änderst/ was noch da ist und nur aus Lesbarkeit weggelassen ist usw.,

in AufbauProg hast du immer noch ping, aber ping ist nirgendwo definiert, deshalb gehe ich mal von Weglassen aus

------

OlineOfflineTest ist erstmal die Klasse überhaupt, die boolean getDaten() am besten berechnen kann,

wieso steht in dessen run-Methode eine Erzeugung von AufbauProg:
> AufbauProg aktualisiere = new AufbauProg();
> aktualisiere.getDaten();

wieso wird auf diese Weise getDaten() abgefragt und nicht die eigene Methode?
ein OlineOfflineTest-Objekt A erzeugt sich auf diese Weise jedenfalls ein AufbauProg-Objekt B

was macht AufbauProg-Objekt B? es erzeugt ping, ein zweites OlineOfflineTest-Objekt C,
C ist was anderes als A, es gibt jetzt verschiedene Objekte von OlineOfflineTest, mit verschiedenen x1-Variablen usw.

siehst du soweit schon das Problem? abgesehen davon C jetzt wieder ein AufbauProg D erzeugt, dieses dann wieder ein OlineOfflineTest E, F, G, H usw..

aber bleiben wir erstmal bei A, B, C,
interessant an obigen Aufruf
> AufbauProg aktualisiere = new AufbauProg();
> aktualisiere.getDaten();
ist nämlich, dass von AufbauProg-Objekt B sofort nach dem Konstruktor Daten abgefragt werden,
AufbauProg hat natürlich keine Ahnung von dem boolean-Wert, leitet diesen Aufruf an C weiter, fragt sentDaten() ab,
dieses sentDaten() von C wird false zurückgeben, denn getDaten() wird erst in der TimerTask-Methode sehr viel später ausgeführt,

das wirst du sicherlich nicht verstehen, viele komplizierte Faktoren kommen zusammen,
konzentriere dich erstmal auf meine erste Frage: warum sollte OlineOfflineTest, welches selber doch am besten Bescheid weiß,
ein AufbauProg-Objekt erzeugen?
 
V

vandewey87

Gast
Thx - für deine Erklärung!

Meine Gedanken:
AufbauProg-Objekt wird erzeugt damit ich die Methode getDaten Methode aufrufen kann
- damit sich diese den Wert von der Klasse OnLineOfflineTest holt (diese ist Klasse erbt von Timer Task
damit diese die Runnable Methode implentieren kann und diese - eine Zeitlich abfrage startet?!
->timer.schedule (ping, 0,2000);

Das mit dem Objekt ist mir auch ungefähr klar - definiere ich diese jedoch wie folgt gibt es einen StackOverflow.

Java:
public class OlineOfflineTest extends TimerTask
{

AufbauProg aktualisiere = new AufbauProg();

public boolean x1=true;
private boolean x;

public void run()
{   
    x1 = getDaten();
    System.err.println("11111111111111111111"+ x1+hashCode());

    
    aktualisiere.getDaten();
}
}

Exception in thread "main" java.lang.StackOverflowError

Frage am Rande: brauch ich ein klass die von timer task erbt damit ich eine
zeitlich abfrage machen kann oder könnte ich dieses innerhalb der AufbauProg auch
in der Art umsetzen?
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
> AufbauProg-Objekt wird erzeugt damit ich die Methode getDaten Methode aufrufen kann
> - damit sich diese den Wert von der Klasse OnLineOfflineTest holt

WER ist denn hier derjenige, der AufbauProg-Objekt erzeugt?
dem Code nach ist es OnLineOfflineTest und wenn man den Satz damit vervollständigt:
"OnLineOfflineTest erzeugt AufbauProg-Objekt damit Wert von OnLineOfflineTest geholt wird"
dann besteht nach wie vor meine von dir unbeantwortete Frage: WARUM diese Schleife, dieser Kreis?

wenn AufbauProg OnLineOfflineTest benutzt, dann sollte die Gegenrichtung tunlichst vermieden werden, in der OnLineOfflineTest-Klasse sollte AufbauProg nicht auftauchen, warum auch?

dass es einen StackOverflowError gibt sage ich doch die ganze Zeit,
vorher hattest du das nur in der run-Methode, die vielleicht erst nach 20 sec startet, so dass es Stunden bis Jahre dauert, bis genügend Objekte gegenseitig erzeugt werden,
jetzt steht der Kreislauf direkt im Konstruktor, nach wenigen ms sind tausende Objekte erzeugt und die Aufrufhierarchie voll

zeitlich warten kannst du auch mit Thread.sleep(20000);
kann sein dass es damit schon besser wird, aber ich verstehe nach wie vor die Grundstruktur nicht
 

Michael...

Top Contributor
Wenn ich mir das ganze so aus den Codefragmenten zusammenreime, erzeugst Du aus einem Objekt heraus einen Thread/Timer, der wiederrum ein Instanz der den Timer erzeugenden Klasse erzeugt, die wiederum einen Thread/Timer erzeugt, der wiederrum ein Instanz der den Timer erzeugenden Klasse erzeugt, die wiederum einen Thread/Timer erzeugt, der wiederrum ein Instanz der den Timer erzeugenden Klasse erzeugt, die wiederum einen Thread/Timer erzeugt, der wiederrum ein Instanz der den Timer erzeugenden Klasse erzeugt, die wiederum einen Thread/Timer erzeugt...
Kein Wunder, dass da irgendwann mal ein Stackoverflow auftritt ;-)
Vielleicht beschreibst Du mal, was Du vorhast, dann könnte man Dir eine richtige Vorgehensweise empfehlen - denn Deine ist definitv falsch.
 
V

vandewey87

Gast
OK, das mit den Objekte erzeugen in den zwei Klassen und das sich die dann quasi gegenseitig aufrufen - hab ich jetzt geschnallt- werd ich unterlassen !

Das Problemm ist wie bekomm ich ann aber die Info von X1 aus der OnlineOfflineTest (wo der Wert zeitlich aktualisiert wird) in die Klasse in AufbauProg? Aufbau Prog brauch diese Information dann zum Anzeigen der Panels....

Könnt ich mir den die OnlineOfflineTest Methode sparen und den Code überhaupt ins Aufbau Prog einbinden?
 

Michael...

Top Contributor
Weiss zwar immer noch nicht was genau Du vorhast, aber wenn Du innerhalb des Threads/Timers Zugriff auf das aufrufende Objekt brauchst (um z.B. Informationen zu aktualisieren) musst Du dem Thread/Timers eine Referenz auf dieses übergeben. Da hatte es auch nichts geholfen, ein neues Objekt vom selben Typ zu erzeugen.
 
S

SlaterB

Gast
so ist es bestimmt gemeint:
Java:
public class Test {
    public static void main(String[] args)  {
        new AufbauProg();
    }
}

class AufbauProg {
    private OnlineOfflineTest ping = new OnlineOfflineTest(this);

    public AufbauProg()  {
        Timer timer = new Timer();
        timer.schedule(ping, 0, 2000);
    }

    public void work() {
        boolean x = ping.getDaten();
        System.out.println("AufbauProg, work: " + x);
    }
}

class OnlineOfflineTest   extends TimerTask {
    private AufbauProg ap;
    private boolean x;

    public OnlineOfflineTest(AufbauProg ap)  {
        this.ap = ap;
    }

    public void run()  {
        x = Math.random() < 0.5;
        System.out.println("OnlineOfflineTest: setze x " + x);
        ap.work();
    }

    public boolean getDaten() {
        return x;
    }
}
 
V

vandewey87

Gast
Das mit der Referenz, werd ich mir mal ansehen

Falls nicht probier ich mit dieser Methode in der AufbauProg Klasse:
Sie ruft mir in einem bestimmten Intervall meine Rückgabe auf
Java:
public void Methode()
    {
    Timer t = new Timer();

      t.schedule(new TimerTask(){

         @Override
         public void run() {
            System.out.println("timer"+System.currentTimeMillis());
            zustandonoff = ping.sentDaten();
         }

      }, 0, 5000);
    }
 
V

vandewey87

Gast
Danke für deine Hilfe!!!! - klappt jetzt alles nach wie ich wollt ! (Code ist jetzt überarbeitet)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
H Methoden in großen Klassen gruppieren oder auslagern? Java Basics - Anfänger-Themen 10
A Klassen und methoden Java Basics - Anfänger-Themen 15
A Bankweverwaltung mit Klassen und Methoden Java Basics - Anfänger-Themen 14
M Aufsplitten von Methoden in andere Klassen Java Basics - Anfänger-Themen 2
Curtis_MC Parameter-Übergabe bei Klassen und Methoden Java Basics - Anfänger-Themen 12
C Methoden/Klassen Übergabewerte Java Basics - Anfänger-Themen 8
C Java Klassen/Methoden/Übergabeparameter Java Basics - Anfänger-Themen 4
C Methoden Auf Methoden anderer Klassen zugreifen Java Basics - Anfänger-Themen 10
J Teile der Funktionalität von Klassen in Methoden platzieren. Java Basics - Anfänger-Themen 3
M Methoden (in Klassen) Java Basics - Anfänger-Themen 4
J Klassen Variablen in andere Klassen oder Methoden übernehmen Java Basics - Anfänger-Themen 1
arjoopy Methoden Methoden anderer Klassen Java Basics - Anfänger-Themen 6
L Klassen - Getter & Setter Methoden Java Basics - Anfänger-Themen 2
T Wie finde ich passende Java Klassen & Methoden? Java Basics - Anfänger-Themen 4
E Erste Schritte Gute Erklärung zu Objekten / Klassen / Methoden / Sichtbarkeiten auf Deutsch Java Basics - Anfänger-Themen 3
R Anfängerfrage zu Methoden in Vererbte Klassen Java Basics - Anfänger-Themen 2
C Methoden aus Klassen anzeigen lassen Java Basics - Anfänger-Themen 14
B Übungsaufgabe zu Klassen, Methoden ... Java Basics - Anfänger-Themen 2
K Methoden als Klassen benutzen Java Basics - Anfänger-Themen 42
K Vererbung Methoden in klassen auslagern und in mehreren Klassen verfügbar machen Java Basics - Anfänger-Themen 8
Pentalon Eclipse JUNO keine Vorschläge von Methoden bzw. Interfaces der eigenen Klassen Java Basics - Anfänger-Themen 5
B Klassen Java Taschenrechner mit Klassen und Methoden Java Basics - Anfänger-Themen 12
staxx6 ArrayList Methoden aufrufen bestimmter Klassen Java Basics - Anfänger-Themen 4
J Problem mit Klassen und Methoden Java Basics - Anfänger-Themen 7
W Kontenverwaltungssystem (Klassen, Methoden) Java Basics - Anfänger-Themen 3
F Interface Unterschied von Attributen und Methoden bei abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 5
H Klassen und Methoden Java Basics - Anfänger-Themen 12
D Kapselung Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 7
A Klassen Methoden... Java Basics - Anfänger-Themen 15
I Objekte an andere Klassen/Methoden übergeben? Java Basics - Anfänger-Themen 5
T Vererbung und Zugriff auf Methoden von abgeleiteten Klassen Java Basics - Anfänger-Themen 2
T Kapselung: public-Methoden in protected-Klassen Java Basics - Anfänger-Themen 3
T OOP abstrakte klassen - methoden Java Basics - Anfänger-Themen 8
T Klassen, Objekte, Methoden Java Basics - Anfänger-Themen 9
U 2 Klassen mit get und set Methoden Java Basics - Anfänger-Themen 11
F Stilfrage: Klassen & Methoden Java Basics - Anfänger-Themen 15
V OOP Klassen Methoden Java Basics - Anfänger-Themen 2
J Verständniss Frage zu Klassen, Objekte und Methoden Java Basics - Anfänger-Themen 8
L Methoden von anderen Klassen Aufrufen Java Basics - Anfänger-Themen 5
J Methoden/Klassen Problem Java Basics - Anfänger-Themen 9
E 2 Klassen - Problem bei Methoden Java Basics - Anfänger-Themen 22
F Auf Methoden anderer Klassen zugreifen? Java Basics - Anfänger-Themen 8
G Abstrakte Klassen und Methoden Java Basics - Anfänger-Themen 3
D In Gui auf Methoden anderer Klassen zugreifen Java Basics - Anfänger-Themen 2
U Methoden aus Programmfremden Klassen nutzen Java Basics - Anfänger-Themen 2
M Klassen/Methoden API Java Basics - Anfänger-Themen 6
G ArraylList aus Klassen --> Methoden der Klassen aufrufen Java Basics - Anfänger-Themen 3
T Funktionen Plotter - Klassen/Methoden/Funktionen Java Basics - Anfänger-Themen 13
H Wie kann ich auf Methoden von anderen Klassen zugreifen? Java Basics - Anfänger-Themen 1
M Methoden von Klassen aufrufen Java Basics - Anfänger-Themen 4
A Methoden von externen Klassen aufrufen Java Basics - Anfänger-Themen 3
G Übertragen von Variablen auf andere klassen oder Methoden Java Basics - Anfänger-Themen 2
J Methoden aus fremden Klassen verwenden Java Basics - Anfänger-Themen 6
T Mehrere paint Methoden in unterschiedlichen Klassen Java Basics - Anfänger-Themen 7
K Methoden Klassen Bsp. Bankkonto Java Basics - Anfänger-Themen 4
M Klassen/Methoden Java Basics - Anfänger-Themen 10
L Zusammenhang Methoden, Klassen, Objekte, static - sun doku Java Basics - Anfänger-Themen 4
C Methoden von verschieden Klassen in eine Klasse reinpacken? Java Basics - Anfänger-Themen 4
T Methoden / Klassen Problem Java Basics - Anfänger-Themen 11
G Methoden/Klassen elementare Probleme Java Basics - Anfänger-Themen 3
E Synchronized - Methoden in verschied. Klassen Java Basics - Anfänger-Themen 3
G dringende frage zu klassen und methoden ( klassendiagramm) Java Basics - Anfänger-Themen 19
L Klassen/Methoden/Objekt/Vererbung Java Basics - Anfänger-Themen 6
frau-u Problem mit Klassen und Vererbung - benutzen von Methoden Java Basics - Anfänger-Themen 2
L Klassen und Methoden für Dateivergleiche. Java Basics - Anfänger-Themen 4
G Was sind Klassen, Objekte und Methoden? Java Basics - Anfänger-Themen 3
H Methoden aus anderen Klassen aufrufen Java Basics - Anfänger-Themen 3
K klassen/methoden Java Basics - Anfänger-Themen 4
M Zugriff auf Klassen/Methoden im Hauptverzeichnis Java Basics - Anfänger-Themen 2
D Initialisierung von Klassen-Objekte Java Basics - Anfänger-Themen 47
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
C Array von Klassen Java Basics - Anfänger-Themen 2
monsterherz 2 Klassen daher Probs mit dem Dateinamen Java Basics - Anfänger-Themen 9
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
L Best Practice Annotierte Klassen im Classpath herausfinden Java Basics - Anfänger-Themen 1
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
Speedrunner klassen aufrufen Java Basics - Anfänger-Themen 41
M Log4J (v2) nachträglich in allen Klassen hinzufügen Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben