私はウェブを精査し、多くのことを試しましたが、何も機能しません。まず、私は 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 の専門家ではなく、このアプリケーションを継承しただけです。