Java WS-won';在杀死其他运行的javaws死实例之前,不要启动应用程序

Java WS-won';在杀死其他运行的javaws死实例之前,不要启动应用程序,java,jnlp,java-web-start,Java,Jnlp,Java Web Start,我正在使用Java开发应用程序,并使用JavaWebStart部署它们。我正在使用Mac OS进行开发,并在Windows XP和7下进行测试。 我遇到了一个奇怪的问题,看起来只有7点 javaws.exe进程以某种方式失败,我无法再次启动应用程序。每次我点击JNLP创建的桌面图标,它都会产生另一个javaws.exe进程,但什么都没有发生,我的代码不会运行,甚至连公共静态void main程序入口点的第一行都不会运行 我试图从命令行启动它,但没有任何日志或错误消息可以帮助我解决此问题。 我试着

我正在使用Java开发应用程序,并使用JavaWebStart部署它们。我正在使用Mac OS进行开发,并在Windows XP和7下进行测试。
我遇到了一个奇怪的问题,看起来只有7点

javaws.exe
进程以某种方式失败,我无法再次启动应用程序。每次我点击JNLP创建的桌面图标,它都会产生另一个
javaws.exe
进程,但什么都没有发生,我的代码不会运行,甚至连
公共静态void main
程序入口点的第一行都不会运行

我试图从命令行启动它,但没有任何日志或错误消息可以帮助我解决此问题。
我试着发射,它像一个魅力

杀死所有运行的
javaws.exe
实例可以解决这个问题,但我不能期望我的客户这样做

这意味着我的应用程序出现了问题,导致java失败。
我遇到了这样的情况:应用程序启动了,我单击红十字会关闭它,然后再次打开它(我更改了服务器端JAR和jnlp文件)。它没有打开,我无法再次打开它,直到我杀死了所有
javaws.exe
实例

以下是一些细节:

  • 在Mac OS X.7下开发
  • 在Windows7下测试
  • 用Java7运行
  • 应用程序是用Eclipse开发的,它有一个SWT UI和几个其他第三方库
  • 我打开了服务器上的所有日志记录
以下是Java控制台内容,当我运行上面提到的JNLP时弹出:

Java Web Start 10.9.2.05
Using JRE version 1.7.0_09-b05 Java HotSpot(TM) Client VM
User home directory = C:\Users\Bicou
----------------------------------------------------
c:   clear console window
f:   finalize objects on finalization queue
g:   garbage collect
h:   display this help message
m:   print memory usage
o:   trigger logging
p:   reload proxy configuration
q:   hide console
r:   reload policy configuration
s:   dump system and deployment properties
t:   dump thread list
v:   dump thread stack
0-5: set trace level to <n>
----------------------------------------------------
    Match: beginTraversal
Match: digest selected JREDesc: JREDesc[version 1.6+, heap=-1--1, args=null, href=http://java.sun.com/products/autodl/j2se, sel=false, null, null], JREInfo: JREInfo for index 0:
    platform is: 1.7
    product is: 1.7.0_09
    location is: http://java.sun.com/products/autodl/j2se
    path is: C:\Program Files (x86)\Java\jre7\bin\javaw.exe
    args is: null
    native platform is: Windows, x86 [ x86, 32bit ]
    JavaFX runtime is: JavaFX 2.2.3 found at C:\Program Files (x86)\Java\jre7\
    enabled is: true
    registered is: true
    system is: true

    Match: ignoring maxHeap: -1
    Match: ignoring InitHeap: -1
    Match: digesting vmargs: null
    Match: digested vmargs: [JVMParameters: isSecure: true, args: ]
    Match: JVM args after accumulation: [JVMParameters: isSecure: true, args: ]
    Match: digest LaunchDesc: http://docs.oracle.com/javase/tutorialJWS/deployment/webstart/ex6/webstart_ComponentArch_DynamicTreeDemo/dynamictree-webstart.jnlp
    Match: digest properties: []
    Match: JVM args: [JVMParameters: isSecure: true, args: ]
    Match: endTraversal ..
    Match: JVM args final: 
    Match: Running JREInfo Version    match: 1.7.0.09 == 1.7.0.09
     Match: Running JVM args match: have:<>  satisfy want:<>
JavaWebStart 10.9.2.05
使用JRE版本1.7.0_09-b05 Java HotSpot(TM)客户端虚拟机
用户主目录=C:\Users\Bicou
----------------------------------------------------
c:清除控制台窗口
f:在终结队列上终结对象
g:垃圾收集
h:显示此帮助消息
m:打印内存使用情况
o:触发日志记录
p:重新加载代理配置
q:隐藏控制台
r:重新加载策略配置
s:转储系统和部署属性
t:转储线程列表
v:转储线程堆栈
0-5:将跟踪级别设置为
----------------------------------------------------
匹配:Begintersal
Match:digest selected JREDesc:JREDesc[version 1.6+,heap=-1--1,args=null,href=http://java.sun.com/products/autodl/j2se,sel=false,null,null],JREInfo:JREInfo用于索引0:
平台为:1.7
产品编号:1.7.0_09
地点为:http://java.sun.com/products/autodl/j2se
路径是:C:\ProgramFiles(x86)\Java\jre7\bin\javaw.exe
args为:null
本机平台为:Windows,x86[x86,32位]
JavaFX运行时是:在C:\Program Files(x86)\Java\jre7中找到JavaFX 2.2.3\
启用的是:true
注册的是:真的
系统是:正确的
匹配:忽略maxHeap:-1
匹配:忽略初始化堆:-1
匹配:正在消化vmargs:null
匹配:已消化的vmargs:[JVMParameters:isSecure:true,args:]
匹配:累积后的JVM参数:[JVM参数:isSecure:true,参数:]
匹配:摘要启动描述:http://docs.oracle.com/javase/tutorialJWS/deployment/webstart/ex6/webstart_ComponentArch_DynamicTreeDemo/dynamictree-webstart.jnlp
匹配:摘要属性:[]
匹配:JVM参数:[JVM参数:ISSecurity:true,参数:]
匹配:endTraversal。。
匹配:JVM参数最终值:
匹配:运行JREInfo版本匹配:1.7.0.09==1.7.0.09
匹配:运行JVM参数匹配:拥有:满足需要:
我的JNLP:


上车
贝诺特·达菲兹
机柜管理逻辑

已启动的崩溃JavaWebStart应用程序可能会使SingleInstanceService继续运行,这将继续进行后续尝试以再次启动同一应用程序。建议向侦听器添加日志消息。注意,日志消息将显示在第一个应用程序的控制台中,而不是刚刚启动的应用程序

private class SingleInstance implements SingleInstanceListener {
    @Override
    public void newActivation(final String[] params) {
        logger.info("newActivation params=" + params);

        ... activation code here ...

    }
}
如果应用程序崩溃,请确保停止所有正在运行的线程并删除已注册的SingleInstanceListeners

SingleInstanceService sis = (SingleInstanceService) ServiceManager.lookup("javax.jnlp.SingleInstanceService");
sis.removeSingleInstanceListener(mySingleInstanceListener);

理想情况下,这些“死亡”过程应该自行死亡。有可能改为修复吗?@PeterLawrey:这就是想法,是的。JNLP看起来是有效的,但在任何情况下都要检查它。您的应用程序是否使用单实例服务:?@AkselWillgert:我刚刚注释了与此相关的代码。我确实使用了它,我确实认为这可能是原因。就是它。聪明的猜测:)