2

我一直在使用 Stackoverflow 来寻找我的编程问题的解决方案,但是对于当前的问题,我还没有找到有用的解决方案。所以我加入了。

将 Java 小程序限制为仅一个实例是一个很好的解决方案。我正在使用 php 为最终用户提供小程序,所以这是一个选择。

但如果我可以通过 Applet 本身限制 Java Applet 的执行,我会更感兴趣。我对Java很陌生,所以我真的不知道从哪里开始寻找这样的结构。

任何建议,将不胜感激。

作为旁注,“ javascript to launch only ONE window for a Java applet with a given URL ”将是一种解决方案。虽然我将小程序嵌入到我正在构建的应用程序中,但我并不真正热衷于为小程序提供服务的弹出窗口。

此致, AltWouss

编辑:
澄清实例限制。我希望每台机器只加载一个小程序。

4

4 回答 4

2

为什么不在您的 applet 的知名端口上启动 SocketServer 呢?

如果打开那个 SocketServer,可能是因为另一个已经在运行。然后,您可以显示一条消息告诉您。

于 2010-07-19T10:01:41.833 回答
1

如果您使用 Java WebStart,那么就有 JNLP SingleInstanceService

于 2010-07-19T12:04:08.680 回答
1

不幸的是,Java 不支持命名互斥锁用于跨进程锁定。但是,您可以通过简单地在您的小程序启动时在已知位置创建一个具有已知名称的文件来实现原始锁。如果无法创建该文件,那么您知道该文件已经存在,因为该应用程序之前已经启动过一次。要确保在应用程序关闭时删除文件,只需调用 File.deleteOnExit() 方法。

就像是:

if(file.createNewFile()) {
    file.deleteOnExit();
} else {
    throw new Exception("Instance already running!");
}

不是一个完美的解决方案,当然也有一些问题......但这对于你想要做的事情可能已经足够了。还可以查看FileLock类,它可以提供更强大和更合适的解决方案。

于 2010-07-19T13:35:48.350 回答
0

我不确定这是否会有所帮助..但我想到的第一件事是..是否可以使小程序成为单例?抱歉,这更像是一个后续问题,而不是一个答案......

于 2010-07-19T10:14:01.963 回答