windows下的java后台应用

windows下的java后台应用,windows,javafx,background-process,single-instance,Windows,Javafx,Background Process,Single Instance,我希望在自己的JVM中有一个主应用程序和一个后台应用程序。 启动main时,必须检查后台是否正在运行,如果没有,则启动。 我将运行多个主电源,但我只需要一个后台应用程序。 即使在所有电源关闭后,后台也可以继续运行 这是我第一次做后台应用,我不知道: 如何启动已卸载的应用程序。(不会同时终止) 如何检查其他应用程序是否正在运行 两个应用程序之间如何通信(我应该使用套接字吗) 我仍处于设计阶段,欢迎任何与我无关的评论或建议。 如果您能提供示例代码或链接,我将不胜感激。据我所知,您正在寻找Sing

我希望在自己的JVM中有一个主应用程序和一个后台应用程序。
启动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);
        }
    }
}

尝试一下,您会发现当您关闭应用程序时,它仍在运行,您将无法启动多个应用程序。

我的第三个问题是如何在应用程序之间传递参数(或数据)。由于您的想法使用套接字,我也将使用它来发送和接收数据。或者,您可以使用套接字或数据报在应用程序之间进行通信。