Zwei abhängige Fenster

Wir sammeln alle Infos der Bonusepisode von Pokémon Karmesin und Purpur für euch!

Zu der Infoseite von „Die Mo-Mo-Manie“
  • Hallo meine Lieben,


    Ich übe gerade für Programmiersprachen II und bin nun bei der letzten Übungsaufgabe (sind keine Hausaufgaben ;D Ich mache die nur für mich - sind nicht mal vom Prof rausgegeben worden, sondern stammen aus einem Buch)
    Und da... Habe ich ein Problem. Denn da bin ich absolut überfragt.
    Da ich es aber für die Klausur brauchen könnte - eventuell - dachte ich, ich frage einmal hier nach.

    Aufgabe:

    Erstellen sie zwei identische Fenster, die jeweils eine Stoppuhr anzeigen (bestehend aus Label, das die aktuelle Zeit anzeigt, und einem Start/Stopp-Button).


    Um den Rest einfach zusammen zu fassen:
    Es soll gleichzeitig nur eine Stoppuhr laufen können, sprich: Wenn die eine Stoppuhr läuft, soll die andere nicht startbar sein. (Und umgekehrt) Das soll über Threads kommuniziert werden.
    Wenn eine Uhr steht und dann wieder gestartet wird, fängt sie bei 0 an.
    Die Fenster sollen beim Start des Programmes untereinander angezeigt werden.


    Meine Hauptprobleme:
    1) Ich weiß, dass es so eine Art vorgeschriebene Stoppuhr-Methode gibt (also die Zeit zählt) in Java -> Aber ich finde die Methode nicht (weiß auch nicht wo das drunter ist).
    2) Ich habe keine Ahnung, wie die Kommunikation via Threads genau funktioniert und bisherige Tutorials haben mich eher mit mehr Fragen stehen gelassen, als zuvor.


    Kann mir da jemand helfen? :/

  • Ich habe bisher weder noch in der Praxis angewandt, deswegen gibt's vorerst nur ein paar grundlegende Tipps, die aber schon helfen könnten. Weitere Fragen kannst du dann immer noch stellen, dann könnte ich auch nochmal selbst nachschauen, sobald ich etwas mehr Zeit habe als gerade.


    1) Ich habe nicht die geringste Ahnung, wie die eventuell existierende Stoppuhr-Methode heißt, aber wenn ihr schon Thread-Programmierung macht sollte es dir ja nicht sooo schwer fallen selbst eine Stoppuhr zu schreiben.


    2) Das Grundprinzip bei Kommunikation über Threads, das dir hierbei hilft, ist, dass man Threads so programmieren kann, dass immer nur ein Objekt gleichzeitig darauf zugreifen kann. Das andere Objekt wird dann solange automatisch pausiert. So in die Richtung sollte das gehen, habe ich nur ganz kurz mal irgendwo ein Beispiel durchgelesen.


    Edit: Falls du hierüber noch nicht gestolpert sein solltest, da kannst du die Grundlagen zur Java-Programmierung mit Threads nachlesen.

  • 1. System.currentTimeMillis()
    Damit könntest du dir aktuelle Zeit bestimmen und dann den Rest über Subtraktion lösen. Und Nanoselkunden wären vllt auch etwas übertrieben...
    2. synchronized für Funktionen, wenn du es über eine einzelne Variable lösen möchtest, auf die beide Fenster zugreifen, wäre volatile besser (ausserdem willst/musst du ja nicht den Zugriff blocken, bis die Funktion fertig ist, wie es synchronized machen würde, sondern den Start der Stopuhr verhindern, wenn sie im anderen Fenster schon läuft)

  • 2. synchronized für Funktionen, wenn du es über eine einzelne Variable lösen möchtest, auf die beide Fenster zugreifen, wäre volatile besser (ausserdem willst/musst du ja nicht den Zugriff blocken, bis die Funktion fertig ist, wie es synchronized machen würde, sondern den Start der Stopuhr verhindern, wenn sie im anderen Fenster schon läuft)


    Du hast nicht verstanden, was ich geschrieben habe, oder?

  • Nein, weil volatile dich nicht vor Race-Conditions schützt. Der korrekte saubere Stil ist hier ein Lock zu setzen.


    Und man braucht nicht zwangsweise eine Methode um synchronized zu verwenden. Außerdem hast du wohl nicht verstanden was volatile bewirkt.