Web Start无法加载外部驱动程序

时间:2011-07-05 20:38:58

标签: java netbeans java-web-start

我有一个项目作为Java应用程序,它运行正常,直到我进入Web启动。我的项目依靠外部库来处理串口和USB端口。

运行此应用。在DOS命令中:

java -DPropLoc=Drivers.Properties -jar myprog.jar <args>

在Netbeans 6.7.1 JRE 1.6u21中,当选择WebStart作为项目配置时,我可以运行主项目但是无法加载驱动程序。 在项目属性中,我将VM选项设置为-DPropLoc="Drivers.Properties,驱动程序依赖于此文件。 但是,如果我一步一步地进行调试,它将加载驱动程序并且运行正常。

网络启动发布有什么问题?

这是加载驱动程序后出现的错误:

Caught java.lang.NullPointerException: name can't be null while loading driver com.sun.comm.Win32Driver
javax.comm.NoSuchPortException at javax.comm.CommPortIdentifier.getPortIdentifier(CommPortIdentifier.java:105)

因为我不明白为什么它在NB中逐步调试时加载了驱动程序。 但是通过按F6运行主项目,它将不会加载驱动程序。 Debug和Run之间的环境或JVM有什么不同。

以下是launch.jnlp档案:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jnlp codebase="file:/C:/bit9prog/dev/NetBeansProjects/MyProg/dist/"  href="launch.jnlp" spec="1.0+">
<information>
    <title>MyProg</title>
    <vendor></vendor>
    <homepage href=""/>
    <description>MyProg</description>
    <description kind="short">MyProg</description>
<offline-allowed/>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.6+"/>
<property name="PropLoc" value="Drivers.Properties"/> 
<jar eager="true" href="MyProg.jar" main="true"/>
<jar href="lib/comm.jar"/>
<jar href="lib/config.jar"/>
<jar href="lib/jakarta-regexp-1.4.jar"/>
<jar href="lib/log4j-1.2.14.jar"/>
<jar href="lib/swing-layout-1.0.jar"/>
<jar href="lib/trove.jar"/>
<jar href="lib/XmlUtil.jar"/>
</resources>
<application-desc main-class="MyProg">
<argument>r</argument>
<argument>.</argument>
</application-desc>
</jnlp>

3 个答案:

答案 0 :(得分:0)

我相信NetBeans不会在同一个当前目录中运行WebStart项目。

我建议你尝试提供驱动程序属性的绝对路径。 其他测试是尝试检查您的程序在哪里运行,即打印new File(".")

我希望这会有所帮助。

答案 1 :(得分:0)

这是一个安全问题。因为您的驱动程序正在进行本机访问,所以必须对其进行签名,如果驱动程序已经签名,那么将其添加到jnlp文件的方式略有不同。

例如,对于使用您的证书签名的内部库,该条目如下所示

        <jar href="myLibrary.jar"/>

但是对于由其他人签名的资源,您的条目看起来像是

<extension href="Driver.jnlp" name="Driver" version=""/>

它需要自己的JNLP文件

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+"
codebase="{yourcodebase}" href="Driver.jnlp">
    <information>
        <title>Driver</title>
        <vendor>Driver Corporation</vendor>
    </information>
    <resources>
        <jar href="lib/TheExternalDriver.jar"/>
    </resources>
    <security>
        <all-permissions/>
    </security>
    <component-desc/>
</jnlp>

答案 2 :(得分:0)

感谢大家的帮助和所有上述感谢安德鲁的有用反馈。 毕竟我能够创建与Webstart一起运行的项目。我必须缩小以仅加载USB驱动程序,而不是加载RS232和USB驱动程序并使该库发生冲突,但奇怪的是它作为标准java应用程序运行良好。由于我无法控制驱动程序的实现方式,因此我所拥有的只是来自驱动程序提供程序的jar文件。也许这是一个安全问题,但我对此表示怀疑,因为我能够自我签名并在本地磁盘上运行。