2011-07-05 11 views
0

私はJavaアプリケーションとしてプロジェクトを持っていますが、Web起動までは正常に動作していました。私のプロジェクトは、外部ライブラリに依存してシリアルポートとUSBポートを処理しています。Web Startが外部ドライバを読み込めません

このアプリを実行するにはDOSコマンドで:NetBeansで

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

はJRE 1.6u21、プロジェクト構成として選択WebStartのを6.7.1、私はメインのプロジェクトを実行することができますが、それはドライバのロードに失敗しました。 プロジェクトプロパティでは、VMオプションが-DPropLoc="Drivers.Propertiesに設定されており、ドライバはこのファイルに依存しています。 しかし、私はデバッグを行い、ステップバイステップで、ドライバをロードしてOKを実行します。

ウェブの起動の問題は何ですか?ステップでNBのステップでデバッグするときには、ドライバをロードし、なぜ私は理解していないので

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) 

これは、私は、ドライバをロードした後に得たエラーです。 しかし、F6キーを押してメインプロジェクトを実行すると、ドライバはロードされません。デバッグと実行の間の環境やJVMの違いは何ですか?私はNetBeansは同じカレントディレクトリにWebStartのプロジェクトを実行していないと信じてい

<?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

JNLPファイルの内容は何ですか? [JaNeLA](http://pscode.org/janela/)を使用して検証しましたか? –

+0

私はJaNeLaを一度も使ったことがありません!打ち上げ。jnlpはNeatbeansによって生成され、すべてのlib jarファイルは自己署名されていました。 – VinceL

+0

あなたの投稿を編集しましたが、私は正しく行ったとは確信していません。変更を慎重に確認してください。また、私が追加した部分を記入することもできます**(..何?)**。 ;) –

答えて

0

これはセキュリティ上の問題です。あなたのドライバはネイティブアクセスを行っているので、署名が必要です。ドライバがすでに署名されている場合、それをjnlpファイルに追加する方法は少し異なります。あなたのエントリーがそう

<extension href="Driver.jnlp" name="Driver" version=""/> 
のように見える他の誰かによって署名されたリソースのために

 <jar href="myLibrary.jar"/> 

しかし次のようにエントリを見て、あなたの証明書を使用して署名された内部ライブラリとたとえば

そして、それは

<?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

プロジェクトをビルドするとき、Netbeansはすべてのjarファイルをjarsigned(selfsignチェックボックスをオンにしました)していますので、ドライバは私によって署名されました。私はあなたの提案を試みます。おかげで – VinceL

+0

私はちょうどこれに気づいた。このプロジェクトでネイティブ(DLL、Unixスタイルの.soなど)が使用されるのは正しいですか?その場合、起動ファイルは間違っています。なぜなら、 'nativelib'要素を使って参照されるべきネイティブは、a)参照されていないb)誤って' jar'というラベルが付けられているからです。これは[ここ](http://download.oracle.com/javase/1.4.2/docs/guide/jws/developersguide/syntax.html#resources)に記載されている2番目の要素です。 –

0

以下はlaunch.jnlpファイルです。

ドライバのプロパティの絶対パスを指定することをお勧めします。 追加のテストは、あなたのプログラムがどこで実行されているかを調べることです。つまり、new File(".")

私はこれが役立つことを望みます。

+0

私はNetbeansがプロジェクトフォルダ内でWebstartを実行すると思います。 – VinceL

+0

プロジェクト\ distにmyprog.jarとlibフォルダを作成しました。また、launch.jnlpとlaunch.htmlファイルを作成しました – VinceL

0

みんなありがとうを、独自のJNLPファイルが必要有用なフィードバックのためにAndrewに感謝します。結局のところ、私はWebstartで実行しているプロジェクトを作成することができました。私はRS232とUSBドライバの両方をロードするのではなく、USBドライバのみをロードするようにスケールダウンしなければならず、そのライブラリの競合がありますが、間違いなく標準のJavaアプリケーションとしてうまく動いていました。私はドライバがどのように実装されているかを制御できないので、ドライバプロバイダのjarファイルだけがあります。たぶんセキュリティ上の問題だったかもしれませんが、私はローカルディスク上で自己署名して実行することができたので疑問に思っています。

関連する問題