windows下的java后台应用
我希望在自己的JVM中有一个主应用程序和一个后台应用程序。windows下的java后台应用,windows,javafx,background-process,single-instance,Windows,Javafx,Background Process,Single Instance,我希望在自己的JVM中有一个主应用程序和一个后台应用程序。 启动main时,必须检查后台是否正在运行,如果没有,则启动。 我将运行多个主电源,但我只需要一个后台应用程序。 即使在所有电源关闭后,后台也可以继续运行 这是我第一次做后台应用,我不知道: 如何启动已卸载的应用程序。(不会同时终止) 如何检查其他应用程序是否正在运行 两个应用程序之间如何通信(我应该使用套接字吗) 我仍处于设计阶段,欢迎任何与我无关的评论或建议。 如果您能提供示例代码或链接,我将不胜感激。据我所知,您正在寻找Sing
启动main时,必须检查后台是否正在运行,如果没有,则启动。
我将运行多个主电源,但我只需要一个后台应用程序。
即使在所有电源关闭后,后台也可以继续运行 这是我第一次做后台应用,我不知道:
- 如何启动已卸载的应用程序。(不会同时终止)
- 如何检查其他应用程序是否正在运行
- 两个应用程序之间如何通信(我应该使用套接字吗)
如果您能提供示例代码或链接,我将不胜感激。据我所知,您正在寻找
SingleInstance
应用程序,您不希望它被终止以执行某些后台进程吗
我不明白第三个问题,但我会直接回答你第一个和第二个问题
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
checkIfRunning(); //Check first if the Application is aready running.
Parent root = FXMLLoader.load(getClass().getResource("fxml/main.fxml"));
primaryStage.setTitle("Hello World");
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
Platform.setImplicitExit(false); //Prevent the Application from Terminating when it's close
}
public static void main(String[] args) {
launch(args);
}
/**The function for checking if the application is already running start here**/
private static final int PORT = 9999;
private static ServerSocket socket;
private static void checkIfRunning() {
try {
//Bind to localhost adapter with a zero connection queue
socket = new ServerSocket(PORT,0, InetAddress.getByAddress(new byte[] {127,0,0,1}));
}
catch (BindException e) {
System.err.println("Application already running.");
System.exit(1);
}
catch (IOException e) {
System.err.println("Unexpected error when checking if application is already running.");
e.printStackTrace();
System.exit(2);
}
}
}
尝试一下,您会发现当您关闭应用程序时,它仍在运行,您将无法启动多个应用程序。我的第三个问题是如何在应用程序之间传递参数(或数据)。由于您的想法使用套接字,我也将使用它来发送和接收数据。或者,您可以使用套接字或数据报在应用程序之间进行通信。