Web Start не может загрузить внешний драйвер - PullRequest
0 голосов
/ 06 июля 2011

У меня есть проект в качестве Java-приложения, и он работал нормально, пока я не перешел в веб-запуск. Мой проект использует внешнюю библиотеку для работы с последовательным портом и портом 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, он не загрузит драйвер. В чем разница между средой или JVM между Debug и Run.

Ниже находится 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 голосов
/ 06 июля 2011

Это проблема безопасности.Поскольку ваш драйвер выполняет собственный доступ, он должен быть подписан, а если драйвер уже подписан, то способ добавления его в файл 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>
0 голосов
/ 08 июля 2011

Спасибо всем за помощь и все выше спасибо Андрею за полезные отзывы. В конце концов я смог создать свой проект, работающий с Webstart. Я должен уменьшить масштаб, чтобы загрузить только драйвер USB, вместо загрузки драйверов RS232 и USB, и возник конфликт библиотек, но, как ни странно, он работал нормально, как стандартное приложение Java. Поскольку я не контролирую, как реализован драйвер, у меня есть только файл jar от поставщика драйверов. Возможно, это была проблема безопасности, но я сомневаюсь в этом, так как я смог самостоятельно подписаться и работать на локальном диске.

0 голосов
/ 06 июля 2011

Я считаю, что NetBeans не запускает проект WebStart в том же текущем каталоге.

Я бы предложил вам указать абсолютный путь к свойствам драйвера. Дополнительный тест - попытайтесь проверить, где запущена ваша программа, то есть print new File(".")

Надеюсь, это поможет.

...