Objekt zur Laufzeit zerstören?

Rockstady

Mitglied
Hallo zusammen,

ich habe leider keine Ahnung, wie ich mein Problem lösen soll und hoffe mal, dass ich die Begriffe auch korrekt verwende.

Ich schreibe derzeit ein Spiel, habe dafür eine Menü-Klasse, die ein Menü darstellt und auch die Navigation hierfür vornimmt. Wenn der Spieler nun auf den Punkt „Training“ fährt und diesen auswählt, wird ein neues Objekt der Klasse „Training“ erstellt. Dann läuft der Code da drin ab und irgendwann ist das Training vorbei und der Spieler sollte wieder zum Menü zurückkehren können.
Wie verlasse ich hierbei nun korrekt meine Klasse Training und komme zum Menü zurück? Ich würde das Objekt einfach zerstören wollen, mit „me.kill“ oder so was. Ist dieses Vorgehen so korrekt?

Falls noch wichtige Informationen fehlen, kann ich diese gerne nachreichen.

Grüße Rockstady
 

Der Müde Joe

Top Contributor
Oder mit anderen Worten: Wenn keine Referenz mehr auf ein Objekt existiert, kommt das Objekt auf die Kill Liste, welche vom Garbage Collector je nach Lust und Laune abgearbeitet wird.
 

BinaryLogic

Mitglied
Dies wird in Java vom Garbagecollector übernommen.
Um die Sache zu beschleunigen, kannst du die "Zerstörung" durch den
Garbagecollector mit objektname = null beschleunigen.

Edit: Bisschen zu spät
 

Rockstady

Mitglied
Woah, danke für die schnellen Antworten, coole Sache.

Ok, verstehe, aber trotzdem, kann sein, dass ich gerade bisschen auf dem Schlauch stehe, aber wie verlasse ich mein "Trainings"Objekt denn nun?
Ich habe nur 1 Fenster und zeichne dort alles rein, wenn das Objekt "Training" existiert, wird primär davon alles gezeichnet und das Menü nicht mehr beachtet.
Wie komm ich vom Code her aber nun auf das eigentliche Menü zurück?

Ich habe in jeder Klasse die Methoden init, calc und draw. Wenn ich "Training" auswähle, werden diese Methoden vom Menü alle an das Objekt weitergegeben. Das Menü läuft praktisch parallel weiter. Ich hoffe es ist verständlich, was ich meine. :)
 

ARadauer

Top Contributor
Ich würde das Objekt einfach zerstören wollen, mit „me.kill“ oder so was
und dann?

Wie killen? Ich würd einfach aufhören...

Java:
public class Training implements Runnable {
   
   private long ende;
   
   public Training(int dauerInMinuten){
     this.ende = System.currentTimeMillis() + dauerInMinuten*60*1000;
   }

   @Override
   public void run() {
      while(System.currentTimeMillis()< ende){
         System.out.println("trainiere!");
         try {
            Thread.sleep(5000);
         } catch (InterruptedException e) {}
      }
      System.out.println("training beendet");
      
   }

}
 

hdi

Top Contributor
Ich hoffe es ist verständlich, was ich meine.
Ne du ;)

Also erstens:
Was du hier erreichen willst hast nix mit den Antworten zu tun, die dir gegeben wurden. Das liegt aber nicht an der Doofheit der Poster, sondern an dem unglücklich gewählten Thread-Titel.
*edit: muss nicht unbedingt auf ardauer's neue Posts zutreffen, wir haben hier gleichzeitig gepostet

Vergiss das mal mit der Garbage Collection - es stimmt was dir hier darüber erzählt wurde, hat aber wie gesagt nichts mit deinem Problem hier zu tun.

Dein Problem hat vllt etwas mit Threads zu tun, aber auch da bin ich mir nicht sicher.
Vllt verstehst du einfach nicht wie ein Programm abgearbeitet wird.
Poste mal bitte eine Art Pseudo-Code wie das bei dir abläuft.
Oder meinetwegen gleich den Code aus deinem Programm, solange es nicht zu viel ist.

lg
 

Rockstady

Mitglied
Ich versuchs mal in Kurzfassung, Code gekürzt, ist also klar, dass es so direkt nicht funktioniert:

Main-Klasse:

Java:
    public void run() {
        while (running) {
            long start = System.currentTimeMillis();
            try {
                if (!pause) {
                    tickCount++;
                    game.calc(tickCount);
                }

Game:

Java:
    @Override
    public void calc(int tickCount) {
                menue.calc(tickCount);
    }

Menü:

Java:
                    case KeyEvent.VK_SPACE:
                        switch (zustand) {
                            case 1:
                                status = 1;
                                training = new Training();
                                break;

Training:

Java:
    public void calc(int tickCount) {
        switch (status) {
            case 1:
                switch (zustand) {
            case 3:
                // Training wird beendet;
                // Nur wie?

So, ich hoffe es passt so.

@hdi: Nur kurz zum klarstellen, von Doofheit von irgendjemand habe ich nie was gesagt und werd es auch nicht tun. Mir ist bewusst, dass ich mich nicht in perfektem Java-Deutsch ausdrücken kann. :oops:
 

hdi

Top Contributor
@hdi: Nur kurz zum klarstellen, von Doofheit von irgendjemand habe ich nie was gesagt und werd es auch nicht tun. Mir ist bewusst, dass ich mich nicht in perfektem Java-Deutsch ausdrücken kann.

Das wollte ich damit auch nicht ausdrücken! Ich hab das dazu geschrieben um meinen Text zu rechtfertigen - damit also die anderen nicht auf mich sauer werden ;)

Nun zum Code:
So ganz blick ich da noch immer nicht durch.
Der Zustand wird durch den tickCount gewechselt, oder wie? Mir fehlt hier die calc Methode des Menüs, was passiert da?
Ich weiss auch nicht was du eigentlich meinst mit "Beenden" des Trainings. Was soll das heißen? Was passiert eigentlich in deinem Programm, außer dass non-stop game.calc() aufgerufen wird?

(Ich hoffe übrigens du hast da noch ein sleep dazwischen in deinem while-loop der Main-Klasse?)

EDIT: weisst du was ich hab das gefühl das ist so ein Thread wo wir erstmal noch 5 Stunden aneinander vorbeireden werden ;)
Poste am besten doch mal den gesamten Code. Es werden ja wohl nicht 74 Klassen mit jeweils 530 Zeilen Code sein oder? Falls doch: Vergiss was ich grad gesagt hab, dann müsstest du's besser per mail schicken.
 
Zuletzt bearbeitet:

ARadauer

Top Contributor
läuft Training in einem eigenen Thread?
hast du sowas auch in Training?
Java:
 public void run() {
        while (running) {

dann einfach running auf false setzen. der thread läuft aus der run raus und wird automatisch beendet und gekillt.
 

Rockstady

Mitglied
Besten Dank an hdi! Er stand mir gestern eine Weile zur Hilfe und mein Problem konnte gelöst werden. Die Themenbezeichnung war hier etwas unglücklich gewählt, da es mit dem Garbage Collector nur am Rande etwas zu tun hat.
Ich ändere nun im Training den Status des Menü ab, so dass das Training nicht mehr angezeigt wird. Das Objekt besteht zwar weiterhin, aber wird nicht mehr weiter beachtet und beim nächsten Aufruf wird es überschrieben.

Also nochmals besonderen Dank an hdi und alle, die hier so schnell geantwortet haben!!! Bei weiteren Fragen wird dies mit Sicherheit meine erste Anlaufstelle sein. :toll:
 

hdi

Top Contributor
Gern geschehen, aber nur damit das klar ist:

Das Objekt besteht zwar weiterhin, aber wird nicht mehr weiter beachtet und beim nächsten Aufruf wird es überschrieben.
Das habe ich nicht gesagt ;) Du überschreibst nicht das Objekt - sowas geht nicht (explizit) - , du überschreibst die Referenz in der Variablen. Das führt nur dazu, dass dein altes Trainings-Objekt nicht mehr referenziert wird, d.h. es ist nicht mehr durch eine Variable ansprechbar. In so einem Fall wird es vom GC geschnappt, das kann aber erst ne Weile nach der Neu-Referenzierung deiner Trainings-Variablen mit dem neuen Trainnigs-Objekt sein
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
T Objekt Array Aufgabe mit Busdatenbank Allgemeine Java-Themen 2
Maxi-JOO Klassen Dummy Objekt in anderen Constructor übergeben Allgemeine Java-Themen 5
el_niiinho13 Objekt auf der Konsole ausgeben lassen Allgemeine Java-Themen 8
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
A Objekt aus anderen Objekten machen Allgemeine Java-Themen 8
SaftigMelo In einem Winkel Objekt bewegen Allgemeine Java-Themen 2
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
H Objekt speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
J Objekt in Bytestream umwandeln Allgemeine Java-Themen 12
J Wie kann ich von Vornherrein einen Fokus auf ein Objekt entfernen? Allgemeine Java-Themen 3
J Information von getSource() Objekt auslesen Allgemeine Java-Themen 1
Drachenbauer Wie stelle ich fest, ob ein Objekt in meinem Array vorkommt? Allgemeine Java-Themen 5
S Variable als Objekt Name Allgemeine Java-Themen 3
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
T Objekt mit String und Int aus TxT Datei erstellen Allgemeine Java-Themen 23
T Objekt in Array packen Allgemeine Java-Themen 6
K Methodenaufruf mit String / String zu Objekt konvertieren Allgemeine Java-Themen 8
S Neues Objekt darstellen Allgemeine Java-Themen 4
J Best Practice Objekt an alle Klassen verteilen ( Discord Bot ) Allgemeine Java-Themen 7
D Objekt-Suche mit mehreren optionalen Parametern Allgemeine Java-Themen 6
M Klassen Objekt weiter geben Allgemeine Java-Themen 1
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
L Variablen Eigenes Objekt wie z.B. einen Integer zuweisen Allgemeine Java-Themen 3
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
S Applet Überprüfen ob ein Objekt angeklickt wurde Allgemeine Java-Themen 2
RalleYTN 3D Objekt Translation basierend auf Rotation (Probleme mit Z Rotation) Allgemeine Java-Themen 0
B Von String zu <Objekt> ||Speichern/Laden Allgemeine Java-Themen 17
G Neues Objekt aus List<JsonObject> mit Stream Allgemeine Java-Themen 4
P Threads Objekt im Konstruktor anders wie im Run()-Block Allgemeine Java-Themen 10
R Objekt funktioniert nicht auf iOS Allgemeine Java-Themen 15
K Textdatei als Objekt Allgemeine Java-Themen 4
Viktim Classenname zu Objekt Allgemeine Java-Themen 4
P Entity Objekt Methoden vs Service methoden Allgemeine Java-Themen 2
D Datentypen Klassenattribut aus Objekt in generischer Liste Allgemeine Java-Themen 15
O Klassen Bruch im gleichen Objekt Speichern Allgemeine Java-Themen 1
P Liste zu Objekt umwandeln Allgemeine Java-Themen 4
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
K Best Practice JFrame Objekt allgemein zugänglich machen Allgemeine Java-Themen 8
B ArrayList in ein Objekt legen Allgemeine Java-Themen 1
D Objekt entlang eines Funktionsgraphens bewegen Allgemeine Java-Themen 6
M Objekt serialisieren/deserialisieren und in einer SQLite-Datenbank speichern Allgemeine Java-Themen 3
D Java Objekt als Service in Runtime registrieren Allgemeine Java-Themen 1
S Interaktion mit einer website (website als Objekt?) Allgemeine Java-Themen 3
J OOP Überwachen, ob ein Objekt erzeugt wird Allgemeine Java-Themen 9
Thallius Hash über serialisiertes Objekt? Allgemeine Java-Themen 3
Developer_X Input/Output Serialisiertes Objekt speichern und laden Allgemeine Java-Themen 1
C Generics Objekt in ArrayList Allgemeine Java-Themen 2
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
F Neues Objekt aus .CSV definition Allgemeine Java-Themen 3
K Methoden Objekt wird nicht erkannt Allgemeine Java-Themen 11
P Objekt mit verschiedenen Datentypen Allgemeine Java-Themen 5
T Objekt kontaktiert seinen "erzeuger" Allgemeine Java-Themen 5
S Objekt orientierte Programmierung Allgemeine Java-Themen 7
C Objekt Datenverlust nach Methodenaufruf Allgemeine Java-Themen 9
H JavaFX Von einer Methode auf stage-Objekt zugreifen Allgemeine Java-Themen 3
T WeakReference/PhantomReference: Mitbekommen WELCHES Objekt nun GC'ed wird Allgemeine Java-Themen 2
T Class-Objekt mit URLClassloader Allgemeine Java-Themen 7
P Konsoleneingabe übernehmen und Objekt instanzieren. Allgemeine Java-Themen 5
E Auf Java-Objekt aus anderer Instanz zugreifen Allgemeine Java-Themen 26
L Klassen Polymorphie:2 Attribute gleichen Namens in einem Objekt Allgemeine Java-Themen 6
P Objekt Array in Datei Speichern Allgemeine Java-Themen 3
F Dynamisch ein Objekt einer bestimmten Subklasse erstellen Allgemeine Java-Themen 7
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
V Objekt löschen Allgemeine Java-Themen 7
A OOP Wie auf Objekt der Superklasse zugreifen? Allgemeine Java-Themen 6
S Datei in File-Objekt mit UTF-8 einlesen Allgemeine Java-Themen 2
M neues Objekt speichern, nicht Referenz Allgemeine Java-Themen 10
B synchronisierter zugriff auf Objekt Allgemeine Java-Themen 6
F Objekt einer Datei verschieben, aber Verzeichnispfad fehlt Allgemeine Java-Themen 6
C Objekt Typ herausfinden Allgemeine Java-Themen 5
E Objekt beim Erzeugen in ArrayList Allgemeine Java-Themen 9
M Objekt prüfen auf null ->Invocation Target Exception??? Allgemeine Java-Themen 2
M Objekt aus Liste in Liste suchen/löschen Allgemeine Java-Themen 6
D Eigenen Objekt Pool Allgemeine Java-Themen 15
C blueJ: Objekt wird nicht in Objektleiste angezeigt Allgemeine Java-Themen 8
T Objekt 2x deserialisieren, aber nur 1x im Heap haben? Allgemeine Java-Themen 4
sambalmueslie Benachrichtigung bei neuer Objekt-Instanz Allgemeine Java-Themen 5
U Konstante in Objekt definieren Allgemeine Java-Themen 6
D this mit Objekt überschreiben Allgemeine Java-Themen 17
R Synchronized - auf welchem Objekt Allgemeine Java-Themen 16
E Objekt erstellen Allgemeine Java-Themen 7
M Timer von nicht existiertem Objekt stopen Allgemeine Java-Themen 5
M Swing-Frontend abhängig von ausgewähltem Objekt Allgemeine Java-Themen 4
J Lebt das Objekt noch?? Allgemeine Java-Themen 12
K Objekt einer konkreten Implementierung eines Interfaces durch übergebenen String Allgemeine Java-Themen 2
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
B Speicherverbrauch Objekt-Referenz Allgemeine Java-Themen 11
D Browser-Objekt erzeugen Allgemeine Java-Themen 8
B FileWriter / FileReader testen / Mock-Objekt für Unit Tests? Allgemeine Java-Themen 6
A Iterationen einer XML-Datei in einem Objekt sichern Allgemeine Java-Themen 5
hdi Frage zur Objekt Initialisierung Allgemeine Java-Themen 4
X Prozess-Objekt nach Ausführung der destroy-Methode null oder nicht null ? Allgemeine Java-Themen 10
T Serialisiertes Objekt über Socket nachladen Allgemeine Java-Themen 8
G Entity Objekt Allgemeine Java-Themen 2

Ähnliche Java Themen


Oben