通过Java Web Start (JNLP)启动的小程序启动两次



我正在通过JNLP和Java Web Start启动一个applet。我的问题是,当页面加载时,两个jvm将启动,并弹出两个Java控制台和两个"您想要运行此应用程序吗?"弹出窗口。除此之外,applet最终会加载,甚至我的本机库也会正确加载。我不太确定是什么原因导致了重复发射。

编辑:另外,第一个加载的JVM会在大约30-45秒后自动关闭。

<script>
var attributes = { code:"com.osgi.swpc.applet.TrackerApplet.class", width:770, height:825};
var parameters = {jnlp_href: "tracker-applet.jnlp"};
deployJava.runApplet(attributes, parameters, "1.6");
</script>

jnlp

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" href="">
    <information>
        <title>Tracker</title>
        <vendor>My Vendor</vendor>
    </information>
    <resources os="Windows">
        <!-- Application Resources -->
        <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se" />
        <jar href="tracker_applet.jar" main="true" />
        <nativelib href="applets/jacob.jar"/>
        <nativelib href="applets/com4j.jar"/>
    </resources>
    <applet-desc 
         name="Tracker Applet"
         main-class="com.osgi.swpc.applet.TrackerApplet"
         width="770"
         height="825">
     </applet-desc>
     <update check="background"/>
</jnlp>

Emm…有趣的问题

我不太确定,因为有更多的细节会很好…但是我第一眼就注意到你的主类副本:

…在JS

var attributes = { code:"com.osgi.swpc.applet.TrackerApplet.class", width:770, height:825};

,然后在JNLP

main-class="com.osgi.swpc.applet.TrackerApplet"

所以请尽量只有一个主类属性。最好把它留在JNLP中,然后再试一次发射;


如果您有其他问题,请评论

报告是否有帮助

我不太确定是什么原因导致了重复发射。

这取决于您正在使用的Java实现,但在Oracle JRE的最新版本(过去是Sun JRE)中,WebStart应用程序将:

  • 缓存JNLP文件
  • 读取JNLP文件以找到需要下载的资源列表(这些通常是您的jar)
  • 构造一个命令来使用最近下载的jar启动一个普通的Java应用程序
  • 启动Java应用

(注意,我并没有试图对Java WebStart的功能给出完整的描述,但我只是试图对这个过程提供一些见解。)

这样,您首先有一个javaws可执行文件,它运行的时间与下载jar所需的时间相当,然后是java可执行文件,它将执行实际的程序。

如果这种情况发生在MSIE,只是想添加一个禁用"智能屏幕过滤器"的建议,特别是在没有/缓慢的互联网接入的情况下。

该选项的位置取决于MSIE版本,我认为在MSIE 7中它直接在Extras菜单中,而在MSIE 9中它在internet选项中的安全设置下。

最新更新