我有一个项目作为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>
答案 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文件。也许这是一个安全问题,但我对此表示怀疑,因为我能够自我签名并在本地磁盘上运行。