Programm per Klick neustarten ?

Frankster

Mitglied
Hi!

Nachdem man die config Datei verändert hat und auf den OK Button geklickt hat, soll das Programm einen Neustart machen.

Ich hab schon gegoogelt, aber wenn man neustart java eingibt, dann kommt eigentlich ziemlich viel, aber nichts was mir hilft :-(

Mfg
Frankster
 
Code:
public void actionPerformed(ActionEvent ae) {
  if (ae.getActionCommand().equals("OK")) {
	//ggf. Fenster schließen (Programmfenster natürlich)
	MyMainKlasse.main(null); //ggf. Parameter mitgeben
  }
}
Etwas hart, aber so geht's. :eek:
 
Hm, wird so nicht nur eine neue Instanz des Programms gestartet? Du wirst die ursprüngliche Instanz noch beenden müssen.
 
Habs nicht ausprobiert, aber so sollte das funktionieren.

Code:
MyMainKlasse.main(null); // neue Instanz des Programms kreieren
myFrame.setVisible(false); // Fenster ausblenden
myFrame.dispose(); // Ressourcen freigeben
System.exit(0); // Programm beenden
 
Genau, vorher kommt noch System.exit(0); ---> zu dumm nur, daß der Thread dann nicht mehr in der Lage ist, die main-Methode auszuführen. :eek:


Bleibt Dir nur, einen neuen Thread starten, der die main-Methode aufruft und im Programmcode danach vom "alten" Thread System.exit(0) ausführen lassen.
 
Hmm, aber mit System.exit(0) schiesst du dir die komplette Java VM weg.

Sprich es wird nichts weiter gemacht.

Ich finde es auch nicht elegant gelöst wenn das ganze programm neu gestartet werden muss, wenn die config geändert wurde.
 
Hallo!

Ich denke auch, dass System.exit(...) keine so gute Idee ist ;-)
wie wär's denn damit?
Code:
 /**
  * 
  */
 package de.tutorials;
 
 import java.awt.BorderLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.lang.reflect.Field;
 import java.util.ResourceBundle;
 
 import javax.swing.JButton;
 import javax.swing.JFrame;
 import javax.swing.JLabel;
 
 import sun.misc.SoftCache;
 
 /**
  * @author daritho
  * 
  */
 public class RestartableApplicationExample extends JFrame {
 
 	private static boolean restart = true;
 
 	public RestartableApplicationExample() {
 		super("RestartableApplicationExample");
 		setDefaultCloseOperation(EXIT_ON_CLOSE);
 
 		//Kleiner Hack um das Caching der ResourceBundle-Werte auszuschalten...
 		try {
 			Field field = ResourceBundle.class.getDeclaredField("cacheList");
 			field.setAccessible(true);
 			SoftCache softCache = (SoftCache) field.get(null);
 			softCache.clear();
 		} catch (Exception e) {
 			e.printStackTrace();
 			throw new RuntimeException(e);
 		}
 		ResourceBundle bundle = ResourceBundle
 		        .getBundle("de.tutorials.RestartableApplicationExample");
 
 		String text = bundle.getString("label.text");
 		JLabel label = new JLabel(text);
 
 		JButton button = new JButton("restart");
 		button.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent e) {
 				restart = true;
 				dispose();
 			}
 		});
 
 		add(label, BorderLayout.CENTER);
 		add(button, BorderLayout.EAST);
 
 		pack();
 		setVisible(true);
 	}
 
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) throws Exception {
 		while (true) {
 			if (restart) {
 				new RestartableApplicationExample();
 				restart = false;
 			} else {
 				Thread.sleep(1000L);
 			}
 		}
 	}
 }

Das Properties File RestartableApplicationExample.properties liegt im Verzeichnis de/tutorials.

Code:
 label.text=fart

Wird der Text in RestartableApplicationExample.properties nach dem Start geändert und anschließend restart angeklickt, so wird die Anwendung mit den neuen Daten aus dem Properties File "gestartet".

Gruß Tom
 
Zurück