【问题标题】:Single instance of a Java desktop application with argument passing带有参数传递的 Java 桌面应用程序的单个实例
【发布时间】:2011-10-19 03:26:56
【问题描述】:

我希望一次只运行一个 Java Swing 应用程序实例。如果打开了第二个实例,我希望它将其参数传递给已经运行的实例。如何使用漂亮、干净的 Java API 来做到这一点? (我不希望自己使用套接字或文件系统锁来实现它)。

我已经看到了许多在 Java 中强制执行单个实例的解决方案,但我所知道的唯一一个将参数传递给正在运行的实例的解决方案使用 JNLP 的SingleInstanceService,而且我不是在编写 Java Web 启动应用程序,所以我不能使用它(我尝试时遇到了 NullPointerException)。

【问题讨论】:

  • @Vlad 在stackoverflow上有很多这样的问题,但是没有一个专门问如何转发参数。
  • 那我猜你把两个问题合二为一了。一旦你决定如何解决问题 #1(单一实例),我认为你可以开始缩小问题 #2 的解决方案。
  • @Vlad 一些 API,就像我提到的那样,为您实现了这两种 API。我正在寻找类似的东西。

标签: java desktop-application single-instance


【解决方案1】:
【解决方案2】:

您可以使用 launch4j 在许多其他事情中执行此操作:

http://launch4j.sourceforge.net/

【讨论】:

  • 我调查了一下,发现了这个例子:launch4j.sourceforge.net/docs.html。不过,看起来没有一种方法可以传递参数。也许我只是找不到合适的文档。
  • 根据他们的文档:“传递命令行参数,也支持常量参数”。我想它是透明的,虽然我还没有尝试过。
  • 来自功能页面,对吗?我认为这与单实例部分无关。在稍微挖掘源代码时,我找不到与将参数传递给其他实例相关的任何内容
  • 所以你想将参数传递给一个已经启动的实例?如果是这种情况,您将不得不离开 JVM 并使用命名管道或 RPC 将消息传递给当前正在运行的进程。即使在 .Net 等 Windows 上使用本机技术,也无法解决这个问题。
猜你喜欢
  • 2021-07-17
  • 2014-07-06
  • 1970-01-01
  • 2013-03-01
  • 2020-04-29
  • 2017-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多