我一直在使用Stackoverflow来寻找我的编程问题的解决方案,但对于当前的问题,我还没有找到有用的解决方案。所以我加入了。
将Java applet限制为仅一个实例的好方法是什么。我正在使用php向最终用户提供applet,因此这是一个选项。
但是如果我能通过Applet本身限制Java Applet的执行,我会更感兴趣。我对Java很陌生,所以我真的不知道从哪里开始寻找类似的结构。
任何建议都将不胜感激。
作为旁注,“ javascript to launch only ONE window for a Java applet with a given URL“将是一个解决方案。虽然我正在将applet嵌入到我正在构建的应用程序中,但我并不热衷于为applet提供弹出窗口。
此致 AltWouss
编辑:
澄清实例限制。我想每台机器只加载一个applet。
答案 0 :(得分:2)
为什么不在applet的众所周知的端口上启动SocketServer?
如果打开SocketServer,可能是因为另一个已经在运行。然后,您可以显示一条消息。
答案 1 :(得分:1)
如果您使用Java WebStart,则有JNLP SingleInstanceService
。
答案 2 :(得分:1)
不幸的是,Java不支持命名互斥锁来跨进程锁定。但是,您可以通过在applet启动时在知道位置创建具有已知名称的File来实现原始锁定。如果无法创建该文件,那么您知道该文件已存在,因为该应用程序之前已经启动过一次。要确保在应用程序关闭时删除文件,请简单地调用File.deleteOnExit()方法。
类似的东西:
if(file.createNewFile()) {
file.deleteOnExit();
} else {
throw new Exception("Instance already running!");
}
不是一个完美的解决方案,当然也有一些问题......但它可能足以满足您的目标。还可以查看那个可以提供更强大和更合适的解决方案的FileLock类。
答案 3 :(得分:0)
我不确定这会有什么帮助..但是我想到的第一件事是......是否有可能让applet成为单身人士? 对不起,这更像是一个后续问题然后回答......