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,驱动程序依赖于此文件。但如果我一步一步地调试,它会加载驱动程序,然后运行正常

web启动有什么问题?

这是我在加载驱动程序后得到的错误:

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来运行主项目,它不会加载驱动程序。调试和运行之间的环境或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>

这是一个安全问题。因为您的驱动程序正在进行本机访问,所以必须对其进行签名,如果驱动程序已经签名,则将其添加到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>

我认为NetBeans并没有在同一个当前目录中运行WebStart项目。

我建议您尝试为驱动程序属性提供绝对路径。附加测试是尝试检查程序运行的位置,即打印new File(".")

我希望这会有所帮助。

感谢大家的帮助,感谢Andrew提供的有用反馈。毕竟,我能够创建运行Webstart的项目。我不得不缩小规模,只加载USB驱动程序,而不是同时加载RS232和USB驱动程序并有库冲突,但奇怪的是,它作为标准的java应用程序运行得很好。由于我无法控制驱动程序是如何实现的,所以我所拥有的只是来自驱动程序提供程序的jar文件。也许这是一个安全问题,但我对此表示怀疑,因为我可以自我签名并在本地磁盘上运行。

相关内容

  • 没有找到相关文章

最新更新