gpt4 book ai didi

java - 保留java应用程序的单例实例

转载 作者:搜寻专家 更新时间:2023-11-01 04:04:08 25 4
gpt4 key购买 nike

我有一个 jar 文件,它在执行时显示一个 JFrame。我不想让我的 Jar 文件重复执行。每次在创建框架之前,我都想使用 Java 检查 Jar 是否已经在执行。如果我的应用程序。屏幕上已经有一个实例,我想把它放在前面。

我该怎么做?请给我一个方法。

最佳答案

Java 中没有针对单个应用程序实例的常规方法。然而,您可以使用Socket 编程技术来实现您的目标。

创建实例时,它会尝试监听 ServerSocket。如果它可以打开 ServerSocket,则表示没有应用程序的另一个实例。因此,它使 ServerSocket 保持 Activity 状态,直到程序关闭。如果它无法打开 ServerSocket,则意味着应用程序已经有另一个实例。所以你可以静默退出应用程序。 此外,您无需在关闭应用程序时重置设置。

尝试以下示例

public class SingletonApplication extends JFrame implements Runnable {

//count of tried instances
private int triedInstances = 0;
//the port number using
private static final int PORT = 5555;

public static void main(String[] args) {
SingletonApplication application = new SingletonApplication();
application.setTitle("My Singleton Application");
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
application.setSize(500, 500);
application.setVisible(true);
}

public SingletonApplication() {
super();

//run socket listening inside a thread
Thread thread = new Thread(this);
thread.start();
}

@Override
public void run() {
try {
//create server socket
ServerSocket serverSocket = new ServerSocket(PORT);

//listing the socket to check new instances
while (true) {
try {
//another instance accessed the socket
serverSocket.accept();
//bring this to front
toFront();

//change the title (addtional);
triedInstances++;
setTitle("Tried another instances : " + triedInstances);
} catch (IOException ex) {
//cannot accept socket
}
}
} catch (IOException ex) {
//fail if there is an instance already exists
try {
//connect to the main instance server socket
new Socket(InetAddress.getLocalHost(), PORT);
} catch (IOException ex1) {
//do nothing
} finally {
//exit the system leavng the first instance
System.exit(0);
}
}
}
}

编辑:

此外:它可以通过客户端 Socket 将您的运行时参数传递到应用程序的主实例。因此,可以使主实例执行所需的任务例如在调用 accept()Socket 的 InputStream 来打开文件或播放音乐> 方法。

关于java - 保留java应用程序的单例实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33038521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com