Naprawdę spóźnisz się na tę, ale hej, lepiej późno niż wcale. Użyj start() podczas inicjowania wszystkiego. Jeśli używasz ramki JFrame, użyj start (ramka Jframe), aby automatycznie obsługiwała program, gdy program jest zamykany ręcznie. Jeśli nie, zadzwoń na Close(), gdy program zostanie ręcznie zakończony, w przeciwnym razie nie rozpocznie się następnym razem.
package your.package;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import javax.swing.JFrame;
public class ReLaunch {
private static boolean relaunchClose = false;
private static File runCheck = new File("run.check");
private static File deleteCheck = new File("delete.check");
/**
* Use ReLaunch to stop multiple instances
*/
public static void start() {
//Check to see if application is already running
if(runCheck.exists()) {
//Mark a request to exit the existing application
try { deleteCheck.createNewFile(); } catch (IOException e) { e.printStackTrace(); }
//Wait until the existing application terminates itself
while(runCheck.exists());
//Remove the delete request so current application doesn't terminate
if(deleteCheck.exists()) deleteCheck.delete();
}
//Mark that this application is currently running
try { runCheck.createNewFile(); } catch (IOException e) { e.printStackTrace(); }
//Creates a new thread that checks if a new application is requesting to run
new Thread(new Runnable() {
public void run() {
//Wait until delete request shows up
while(!deleteCheck.exists());
//Proof that the application is closed to be re-launched
relaunchClose = true;
//Unmarks this application as running
if(runCheck.exists()) runCheck.delete();
//Terminated so new application can run
System.exit(0);
}
}).start();
}
/**
* Same as start, but automatically handles when the frame is closed by the user by marking that no applications are running
* @param frame JFrame which needs to be closed
*/
public static void start(JFrame frame) {
start();
//Listen for when the window is manually closed
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent event) {
onClose();
}
});
}
/**
* Marks this application as not running if it is exited manually
*/
public static void onClose() {
if(!relaunchClose) runCheck.delete();
}
}
Istnieje przycisk stop z czerwonym kwadratowy obrazu. Kliknij go, aby zatrzymać/zabić aplikację. –
@LuiggiMendoza To zatrzymuje tylko bieżący proces. Musisz zakończyć proces java za pomocą menedżera zadań (przynajmniej tak to zawsze robiłem). Ale, szczerze mówiąc, po prostu dodaj do swojego okna moduł onclose: 'frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE)' – Vulcan
@Vulcan to działało dla mnie nawet z aplikacjami wielowątkowymi, które uruchamiam w środowisku Eclipse (działa nawet w celu zatrzymania/zabicia serwera aplikacji WWW). –