Programm beenden

Status
Nicht offen für weitere Antworten.

Coder21

Aktives Mitglied
Hallo!
Ich habe zwei Klassen. Wenn ich die erste Beende, soll die zweite gestartet werden und andersherum. Das funktioniert ganz gut, jedoch erhalte ich nach einiger Zeit einen Java-out-of-memory-Error.
Wie kann ich nun die Klasse, die beendet werden soll so beenden, dass der Speicher wieder freigegeben wird?

Vielen Dank für euere Hilfe!
Coder21
 

Leroy42

Top Contributor
Hmmh! Verläßt du denn die run-Methode nachdem du den jeweiligen
anderen Thread gestartet hat? ???:L

Ansonsten (also eher nicht-ansonsten) bräuchten wir schon den Code.
 

Coder21

Aktives Mitglied
Hallo!
Ich habe hier mal ein Beispielprogramm geschrieben:

Klasse 1:
Code:
import javax.swing.*;
import java.awt.event.*;

public class Klasse1 extends JFrame implements Runnable,KeyListener
{
     public Klasse1()
     {
          setVisible(true);
          addKeyListener(this);
     }
	Thread th;
	public void start()
	{
		th=new Thread(this);
		th.start();
	}
	public void run()
	{
		while(true)
		{
			...
		}
	}

	public void keyPressed(KeyEvent e)
	{
		if(e.getKeyCode()==KeyEvent.VK_ESCAPE)
		{
			th.stop();
                        new Klasse2().start();
		}
	}
	public void keyReleased(KeyEvent e)
	{
	}
	public void keyTyped(KeyEvent e)
	{
	}
}

Und Klasse2:
Code:
import javax.swing.*;
import java.awt.event.*;
public class Klasse2 extends JFrame implements Runnable,KeyListener
{
     public Klasse1()
     {
          setVisible(true);
          addKeyListener(this);
     }
	Thread th;
	public void start()
	{
		th=new Thread(this);
		th.start();
	}
	public void run()
	{
		while(true)
		{
			...
		}
	}

	public void keyPressed(KeyEvent e)
	{
		if(e.getKeyCode()==KeyEvent.VK_ESCAPE)
		{
			th.stop();
                        new Klasse1().start();
		}
	}
	public void keyReleased(KeyEvent e)
	{
	}
	public void keyTyped(KeyEvent e)
	{
	}
}


Da ich noch Anfänger bin, kann es sein, dass meine Ausdrucksweise etwas falsch ist. Ich bitte dies zu entschuldigen!

Coder21
 

Leroy42

Top Contributor
Klasse 1:
Code:
public class Klasse1 extends JFrame implements Runnable,KeyListener
{
     ...
	public void run()
	{
                        boolean ende = false;
		while(!ende)
		{
                                   try {Thread.sleep(10);} catch(InterruptedException e) {ende = true;}
			...
		}
	}
            ...


}


Die Methode interrupt bittet den Thread nur, sich zu beenden.
Beenden muß er sich schon selbst.

Falls noch Fragen, melde dich einfach.
 

Leroy42

Top Contributor
... und natürlich
Code:
th.interrupt();
anstelle von
Code:
th.stop()
benutzen.
 

Coder21

Aktives Mitglied
Sehr gut! Es funktioniert jetzt!

Aber wenn jetzt eine der beiden Klassen kein Thread mehr ist, dann hab ich sofort wieder eine Java - out-of-memory Exception. Woran liegt das und wie kann ich das abstellen?
Anders gefragt: Wie kann ich jeden Speicher, den die Klasse belegt, wieder freigeben?

Ich wäre euch sehr dankbar, wenn ihr mir nochmal helfen könntet!

Coder21
 

Coder21

Aktives Mitglied
Hallo!

Ich beziehe mal mein Problem auf die Praxis.
Ich habe ein Fenster, welches das Startprogramm ist. Bei einer bestimmten Benutzereingabe wird ein dieses Fenster nicht mehr angezeigt, und ein Thread, bei dem ein zweites Fenster angezeigt wird, gestartet. Wenn nun dieser Thread beendet wird (wieder durch eine bestimmte Benutzereingabe), soll das erste Fenster wieder angezeigt werden.

Ich hoffe es klingt nicht zu kompliziert.


Ich habe noch einen zweiten Ansatz versucht:
Ich habe von diesem 1. Fenster aus, den Thread mit der Methode
Code:
public void run()
gestartet. Wenn dieser Thread dann fertig war, wurde das 1.Fenster wider angezeigt. Allerdings konnte so das 2. Fenster keine KeyEvents abfangen. Woran liegt das?


Ich wäre froh, wenn ihr mir eins dieser Probleme lösen könntet. Wie gesagt, bin ich noch Anfänger und kenne deshalb (noch :lol: ) nicht alle Möglichkeiten zum Lösen der Probleme.

Coder21
 

HoaX

Top Contributor
du weißt dass man nich nen extra thread braucht um ein zweites fenster anzuzeigen?
Code:
public class Window1 {

...

private void showWindow2(){
 Window2 newWin = new Window2();
 
 newWin.addWindowListener(new WindowAdapter() {
   void windowClosed(WindowEvent e) {
     Window1.this.setVisible(true);
   }
 });
 
 newWin.setVisible(true);
 this.setVisible(false);
 
}

...
}

so in etwa - ungetestet.
wenn das fenster 2 geschlossen wird, wird automatisch fenster1 wieder sichtbar gemacht.[/code]
 

Coder21

Aktives Mitglied
Hallo!

Klar weiß ich das, aber ich brauch für mein Programm einen Thread.
Das ganze funktioniert jetzt auch super!

Dennoch weiß ich nicht, wie ich den Speicher wieder freigeben kann, nachdem der Thread geschlossen wurde.
In dem Thread habe ich unter anderem ein 1000*1000 Array, welches ich danach nicht mehr brauche.
Auch wenn ich dem Array null zuweise und dann den GarbageCollector aufrufe, wird der Speicher nicht freigegeben!
Woran liegt das??? :?:
 

WieselAc

Top Contributor
Am besten zeigst du mal deine "aufräumen" Zeilen, sonst wird es etwas schwer.

Ein Tipp der aber häufig passend ist: Der gc() Aufruf ist wie du sicher weißt nur ein Vorschlag, der nicht zwangsläufig umgesetzt wird. Dennoch hilft es meistens den aufruf zweimal zu machen.
 

Coder21

Aktives Mitglied
Hallo!
Hier meine "aufräumen" Zeilen:

Code:
         public void ENDE()
	{
		ende=true;                        //Abbruchbedingung in der run() Methode
		Strecke=null;                     //Strecke=Array
		System.gc();                      //Garbage Collector
	        setVisible(false);
                dispose();
		th.interrupt();                     //Thread stoppen
	}

Ich hoffe ihr könnt mir weiterhelfen!
 

Leroy42

Top Contributor
Code:
ende=true;                        //Abbruchbedingung in der run() Methode 
Strecke=null;                     //Strecke=Array 
System.gc();

Du rufst den GC ja auf, bevor der Thread beendet wird.

Vorschlag: Warte erst auf das Ende des Thread (z.B. mit join())
und rufe erst dann den GC auf.
 

Lim_Dul

Top Contributor
Der Aufruf des GC bringt aber nix, wenn es zu einer OOM-Exception kommt. Der Fehler muss dann woanders liegen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Java Programm sauber beenden (Mac OS) Allgemeine Java-Themen 7
Developer_X Java Programm Beenden Allgemeine Java-Themen 3
R Java Programm beenden mit SIGTERM Allgemeine Java-Themen 9
E beim Ende der main() das Programm nicht beenden Allgemeine Java-Themen 3
T Programm mit Tastaturbefehl beenden? Allgemeine Java-Themen 8
W Programm beim Shutdown beenden Allgemeine Java-Themen 3
R Programm per Tastendruck beenden Allgemeine Java-Themen 19
D Programm vorzeitig beenden Allgemeine Java-Themen 8
K Programm durch Tastendruck beenden Allgemeine Java-Themen 4
H Gestartetes Programm beenden ? Allgemeine Java-Themen 8
A Anwendung starten und beenden von einem anderen programm Allgemeine Java-Themen 5
W Externes Programm beenden mit eigenem Programm beenden Allgemeine Java-Themen 7
C Loggen beim beenden vom Programm Allgemeine Java-Themen 3
Jose05 Umgang mit Exceptions in einen Programm Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
R Programm führt Methoden gleichzeitig aus Allgemeine Java-Themen 2
T Der Aufruf von CMD-Programm Allgemeine Java-Themen 30
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
Mike80 Processing Programm fiert ohne Arduino ein Allgemeine Java-Themen 2
B Mysteriöse Ergebnisse beim Baccarat Programm? Allgemeine Java-Themen 13
districon Programm zum Durchsuchen von (Ebay-)Artikeln Allgemeine Java-Themen 1
T Addons im eigenen Programm Allgemeine Java-Themen 1
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
Alex_99 Programm stürzt beim Aufruf der Funktion ab? Text ausgeben Allgemeine Java-Themen 45
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
Tiago1234 Warum hängt sich mein Programm auf? Allgemeine Java-Themen 22
D Programm designen Allgemeine Java-Themen 1
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
J c Programm läuft nicht in compilierter Version des Java Projektes Allgemeine Java-Themen 7
O 2D-Grafik BioFarben-Programm soll auf Vollbild schalten Allgemeine Java-Themen 1
S Nachrichten Filter Programm Allgemeine Java-Themen 14
S Programm schreiben, das mir aufgrund von Schlagwörtern, die ich im Internet suche, relevante Themen sofort anzeigt. Allgemeine Java-Themen 1
T Hilfe bei Programm. IDE: Eclipse mit EV3-Plugin, lejos Allgemeine Java-Themen 8
Lukas2904 Swing Anzeigen lassen das das Programm geschlossen wurde Allgemeine Java-Themen 3
TechnikTVcode Mail Programm Allgemeine Java-Themen 2
S Programm entwickeln, welches ein Dreieckspuzzle lösen kann Allgemeine Java-Themen 5
R Lesen von Interfaces (Programm Vervollständigen) Allgemeine Java-Themen 10
Dann07 Java-Programm findet DLLs nicht! Allgemeine Java-Themen 20
OSchriever Linux-Programm öffnen Allgemeine Java-Themen 6
P USER Management in SQL übergreifend auf JAVA Programm Allgemeine Java-Themen 41
L Eclipse Konsole im exportierten Programm Allgemeine Java-Themen 2
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
D Verkauf von einem Programm welches ich in Java geschrieben habe Allgemeine Java-Themen 4
M Programm erkennt String aus .txt Datei nicht Allgemeine Java-Themen 3
P Erstelltes Programm ist doppelt so groß Allgemeine Java-Themen 11
N Programm nach Abschluss neustarten lassen Allgemeine Java-Themen 6
S Einfaches Programm programmieren Allgemeine Java-Themen 5
M kleines KI Programm Idee Allgemeine Java-Themen 7
D Boolean von ein anderem Java Programm während der Laufzeit ändern Allgemeine Java-Themen 23
L Excel Datei löscht sich selbst im Programm - Java Allgemeine Java-Themen 3
I File ausführen und mein Programm bearbeiten lassen Allgemeine Java-Themen 11
ralfb1105 Starten Java App(s) (.jar) aus einem Java Programm Allgemeine Java-Themen 18
temi Java Programm aus einer DB laden und starten Allgemeine Java-Themen 2
N Programm startet nicht, nur per cmd Allgemeine Java-Themen 5
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
E Java Programm mit Clients erweitern - Möglichkeiten? Allgemeine Java-Themen 2
Joker4632 Methoden Befehl an bereits extern geöffnete Programm-spezifische Konsole senden Allgemeine Java-Themen 1
M Dieses Programm schneller machen? Allgemeine Java-Themen 2
R Programm zur Rekursion Allgemeine Java-Themen 5
N Quicksort Programm hängt sich auf Allgemeine Java-Themen 6
S Compiler-Fehler Programm verhält sich in Eclipse anders Allgemeine Java-Themen 1
B Input/Output Programm zum Auslesen/Beschreiben von Textdateien, wie Geschwindigkeit erhöhen? Allgemeine Java-Themen 18
dereki2000 Programm veröffentlichen Allgemeine Java-Themen 14
mrbig2017 Threads Chat Programm mit Threads? Allgemeine Java-Themen 2
M Suche aktuelle Apache Poi Bibliothek zum Einbinden in mein Programm Allgemeine Java-Themen 2
J Java "Bank Programm" Brauche eure Hilfe Allgemeine Java-Themen 3
S Java Programm (Spiel mit den Boxen) Allgemeine Java-Themen 1
kodela Programm hängt in der Ereigniswarteschlange Allgemeine Java-Themen 13
A Java Programm verbessern/vereinfachen Allgemeine Java-Themen 20
P Programm darf nicht mehrfach startbar sein Allgemeine Java-Themen 16
S Programm hängt sich manchmal (selten) auf Allgemeine Java-Themen 9
JavaNewbie2.0 Programm nicht im Taskmanager schliesen können Allgemeine Java-Themen 15
J XML Datei mit installiertem Programm öffnen Allgemeine Java-Themen 7
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
H Java FX 2 Fragen um Programm in mehrere sprachen zu übersetzen in Gluon Framwork Allgemeine Java-Themen 3
JavaNewbie2.0 Programm bleibt "stehen" Allgemeine Java-Themen 2
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
E Mit Java ein Python Programm starten Allgemeine Java-Themen 20
Q-bert Daten von Java Programm speichern Allgemeine Java-Themen 4
Aruetiise Methoden .jar mit Programm öffnen Allgemeine Java-Themen 2
C anderes Programm schließen! Allgemeine Java-Themen 5
C Webseiten Programm problem Allgemeine Java-Themen 5
E Programm auf Installation prüfen Allgemeine Java-Themen 1
J Programm zum Download von CSV-Dateien Allgemeine Java-Themen 4
E Programm ohne Windowsrand(Vollbild) ? Allgemeine Java-Themen 5
G Programm, das nach abgearbeiteter main Methode weiterläuft Allgemeine Java-Themen 72
P Schnittstelle java Programm zu Webserver / Browser Allgemeine Java-Themen 2
J Schutz Programm Jar Exe Allgemeine Java-Themen 7
R javax.comm --> Programm funktioniert nach Export nicht mehr Allgemeine Java-Themen 0
Blender3D Java Swing Programm Windows 10 Autostart Problem Allgemeine Java-Themen 2
U Input/Output Warum wirft mir das Programm diesen Fehler? Allgemeine Java-Themen 6
X jvm exception abfangen und an externes Programm schicken Allgemeine Java-Themen 4
B Programm updaten mit FXLauncher Allgemeine Java-Themen 1
D Nicht quelloffenes Programm Allgemeine Java-Themen 5
F Java-Programm lizensieren Allgemeine Java-Themen 21
I Programm im Hintergrund bei Windows zur Steuerung der Tastatur nutzen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben