2

私はウェブを精査し、多くのことを試しましたが、何も機能しません。まず、私は Java の第一人者ではありませんが、ここで下調べをしたところ、すべてが正しく署名されており、動作するはずです。アプリは他の人によって開発されましたが、コードがあり、最新の Java リリースまで問題なく動作していました。現在、署名されていないことを回避するエラーがスローされます。build.xml で signjar を使用してコードに署名するために使用する GoDaddy 証明書があります (Netbeans を使用しています)。2 つのプロジェクトがあります。1 つはスケールと通信するためにシリアル ポートにアクセスするもの (RXTXMyComm) で、もう 1 つはデータ計算などを行うもの (CWML) です。RXTXSerial DLL は、rxtxSerial.native.jar という jar にも含まれています。

まず、次の build.xml を使用して RXTX プロジェクトをコンパイルおよびビルドします (署名方法を示すための頭文字)。

<project name="RXTXCommMY" default="default" basedir=".">
    <description>Builds, tests, and runs the project RXTXCommMY.</description>
    <import file="nbproject/build-impl.xml"/>

    <target name="-post-jar">
        <jar destfile="dist/rxtxSerial.native.jar">
            <fileset dir="lib/win32" includes="rxtxSerial.32.dll" />
            <fileset dir="lib/win64" includes="rxtxSerial.64.dll" />
        </jar>
        <signjar jar="dist/rxtxSerial.native.jar" storetype="pkcs12" storepass="MYPASS" alias="cwml's godaddy.com, inc. id" keystore="../CERTNAME.p12" signedjar="dist/rxtxSerial.native.signed.jar" />
        <delete file="dist/rxtxSerial.native.jar" />

        <signjar jar="${dist.jar}" storetype="pkcs12" storepass="MYPASS" alias="cwml's godaddy.com, inc. id" keystore="../CERTNAME.p12" signedjar="dist/RXTXCommMY.signed.jar" />
        <delete file="${dist.jar}" />
    </target>
</project>

`

これらの jar は CWML プロジェクトに含まれ、次のようにビルドされます。

<target name="-post-jar">
        <tstamp>
            <format property="build.timestamp" pattern="yyyyMd_HmsS" />
        </tstamp>

        <filter token="build.timestamp" value="${build.timestamp}" />

        <basename property="jarFilename" file="${dist.jar}" suffix=".jar" />
        <signjar jar="${dist.jar}" storetype="pkcs12" storepass="MYPASS" alias="CWML's godaddy.com, inc. id" keystore="../CERTNAME.p12" signedjar="dist/${jarFilename}_v${build.timestamp}.jar" />
        <delete file="${dist.jar}" />

        <copy file="index.html" todir="dist" filtering="true" />
        <copy file="cwml.jnlp" todir="dist" filtering="true" />
    </target>

`

jnlp は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<jnlp>
    <information>
        <title>Scale Applet</title>
        <vendor>Scale Applet</vendor>
    </information>

    <security>
        <all-permissions />
    </security>

    <resources>
        <j2se version="1.7+" />
        <jar href="CWML_v2013427_153155832.jar" main="true" />
        <jar href="lib/RXTXCommMY.signed.jar?v=2013427_153155832" />
        <nativelib href="lib/rxtxSerial.native.signed.jar?v=2013427_153155832" />
    </resources>

    <applet-desc name="ScaleApplet" main-class="cwml.ScaleApplet" width="200" height="40">
    </applet-desc>
</jnlp>

`

Janela 検証ツールを実行しましたが、問題ありません。

Netbeans で実行および動作し、更新 21 以前は正常に動作していました。また、jnlp からタグを削除すると、Java 7.0 21 を使用する IE では動作しますが、Chrome では動作しないことがわかりました。Chrome で Java コンソールを実行すると、次のようになります。

`

java.lang.ExceptionInInitializerError thrown while loading gnu.io.RXTXCommDriver
Exception in thread "Thread-15" java.lang.ExceptionInInitializerError
    at cmwl.ioport.PortHelper.getAvailablePorts(PortHelper.java:49)
    at cmwl.ioport.PortHelper.connectSerialPorts(PortHelper.java:64)
    at cmwl.ioport.PortHelper.run(PortHelper.java:42)
Caused by: java.security.AccessControlException: access denied ("java.util.PropertyPermission" "sun.arch.data.model" "read")
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at sun.plugin2.applet.AWTAppletSecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
    at java.lang.System.getProperty(Unknown Source)
    at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:123)
    ... 3 more

` もっと詳細なトレースを実行したところ、3 つの jar すべてについて証明書が検証されていることがわかりました。これが私たちに大きな問題を引き起こしているので、私は途方に暮れています。呼び出されている 123 行目は次のとおりです。

System.loadLibrary( "rxtxSerial." + System.getProperty("sun.arch.data.model") );

どんな助けでも大歓迎です。私が言ったように、私は Java の専門家ではなく、このアプリケーションを継承しただけです。

4

1 に答える 1

0

あなたの問題は、私が最近遭遇した問題のようです。その理由は、ネイティブ ライブラリのロード手順にあるようです。次のように初期化コードを書き直してみてください。

AccessController.doPrivileged(new PrivilegedAction() {
  public Object run() {
    System.loadLibrary(...);
    System.loadLibrary(...);
    return null;
  }
});
于 2013-04-29T06:52:23.077 に答える