我需要阻止用户多次启动我的Java应用程序(WebStart Swing应用程序).因此,如果应用程序已在运行,则无法再次启动它或显示警告/再次关闭.
有没有一些方便的方法来实现这一目标?我想过阻塞一个端口或写一个文件.但希望您可以访问某些系统属性或JVM?
顺便说一句.目标平台是带有Java 1.5的Windows XP
我有这个小测试程序跟踪PID的创建和关闭.我正在调查我的程序已找到的问题,并想问你这个问题,以便更好地了解正在发生的事情.
当一个Windows进程启动时,它会获得一个PID,但是当进程关闭时,PID是否会退役(就像一个明星篮球运动员的球衣号码),或者是否有可能在该发布的情况下创建一个新的,完全不相关的进程PID?
谢谢
我希望我的应用程序检查其自身的另一个版本是否已经运行.
例如,已demo.jar启动,用户单击以再次运行它,但第二个实例意识到"哦等待,已经有demo.jar运行".然后退出并留言.
我想阻止在java中启动多个应用程序实例.我知道2种方法:
但哪一种更有效,更好用?我应该使用哪一个?
任何其他做同样的解决方案也是受欢迎的.
我目前正在用 JAVA 构建一个应用程序,其中只能执行一次。所以我目前正在使用一个锁定文件,我在其中写入当前执行的 PID。
因此,每当此应用程序启动时,它都会打开文件(如果存在)并尝试检测写入文件的 PID 是否实际正在运行。
这可以防止我的应用程序在解锁文件之前崩溃的问题。
我需要它在 Windows(XP、7 或 8)和 linux(所有用户都在基于 debian 的发行版上)上工作。
这是一些代码,可以让您更好地了解我想要做的事情:
//get the PID from the file
int pidValue = new FileReader(file).read();
//get the OS type
String os = System.getProperty("os.name").toLowerCase();
//Check PID depending of OS type
if( os.contains("nux") || os.contains("nix") ){
/*
* Check PID on Linux/Unix
*/
} else if ( os.contains("win") ) {
/*
* Check PID on Windows
*/
}
Run Code Online (Sandbox Code Playgroud)
我试图找到关于这个主题的文档,但我还没有找到任何有用的东西。
非常感谢。
当用户"关闭"程序时单击所有退出按钮,以便不再有托盘图标时,尝试这样做.
我调用了Platform.setImplicitExit(false); 所以程序仍然在后台运行.
我试图学习如何使用它,当用户重新单击运行jar的.exe文件时,而不是运行新程序,它重新显示在后台运行的程序.
Platform.setImplicitExit(false);
Run Code Online (Sandbox Code Playgroud) 我有以下关于声明主方法同步的dount .
所以阅读这个讨论: 声明主方法同步
我可以读到:
同步可防止多个实例同时执行,这可能是合乎需要的.
那究竟是什么意思呢?
我试着做一个例子:
我有一个非常小的批处理应用程序,可以在数据库上执行一些操作.该应用程序主要由main()方法组成.我编译了一个可以执行的.jar文件.
这意味着将此main()方法声明为同步我不能同时运行此jar文件的2个实例?或者我错过了什么?