-2

com2 - com ポート ( rxtx ライブラリ ) で動作するクラスです。gwt でサイトを実行し、ボタンを押すと、この関数とエラーが実行されます。

public String greetServer(String input)  {


    try {
        comm2 COM = new comm2("COM3", "$KE,WR,6,1\n");
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return input;



}


  Caused by: java.lang.NoClassDefFoundError: Could not initialize class gnu.io.CommPortIdentifier
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at com.google.appengine.tools.development.agent.runtime.RuntimeHelper.checkRestricted(RuntimeHelper.java:69)
        at com.google.appengine.tools.development.agent.runtime.Runtime.checkRestricted(Runtime.java:64)
        at com.aaa.server.comm2.<init>(comm2.java:17)
        at com.aaa.server.GreetingServiceImpl.greetServer(GreetingServiceImpl.java:18)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:115)
        at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569)
        ... 34 more

最初の実行時にエラーで表示されます

Caused by: java.security.AccessControlException: access denied (java.lang.RuntimePermission loadLibrary.rxtxSerial)
4

2 に答える 2

4

GWT は主に、Java コードを完全にブラウザー内で実行される Javascript に変換するクロス コンパイラーです。つまり、あらゆる種類の IO や COM ポートへのアクセスなど、ブラウザー内で実行できないことは実行できません。

更新 1:


実際に質問を確認したところ、コードはクライアントではなくサーバーで実行されているようです。あなたの質問は私を混乱させました。質問は、埋め込まれた桟橋などで gwt rpc を介してライブラリを実行することについてだったはずです。

スタックトレースに Google App Engine がリストされていることがわかります。App Engine でアプリを実行するつもりですか? はいの場合、どのようにハードウェアにアクセスする予定ですか? そうでない場合は、アプリ エンジンの依存関係を削除し、Web サーバーで直接実行する必要があります。

于 2012-07-06T12:43:06.323 に答える
3

これは、正しいディレクトリまたはパスにすべての RxTx ネイティブ依存関係がないためです。

このエラーを回避するには、RxTx フォークである「Neuron Robotics Java Serial Library」を使用します。

元の RxTx よりもいくつかの利点

  • ネイティブ ライブラリの自己展開 (すべてのネイティブ コードは jar 内に格納され、実行時に展開されます)。ネイティブ コードを手動でインストールする必要はもうありません
  • NRSerialPort と呼ばれる簡略化されたシリアル ポート クラス: オープン、読み取り、書き込み

から「.Jar」をダウンロード

または、maven を使用する場合は、

<dependency>
    <groupId>com.neuronrobotics</groupId>
    <artifactId>nrjavaserial</artifactId>
    <version>3.7.5.1</version>
</dependency>

ここでmavenの最新バージョンを確認してください

PS: Google コードの最終バージョンは 3.8.4 で、mvnrepository は 3.7.5.1 です。

于 2012-07-08T04:08:40.663 に答える