13

JavaScript 内で jar ファイルのクラスを使用する必要があります。私は Java ScriptEngine を介して JavaScript を使用しており、ここで Jython で行ったことと同様のことをしたいと考えています。

    import org.python.core.Py;
    import org.python.core.PySystemState;
    ...
    PySystemState engineSys = new PySystemState();
    engineSys.path.append(Py.newString("C:/GMSEC_API/bin/gmsecapi.jar"));
    Py.setSystemState(engineSys);
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("python");

When I do this with Jython it works fine and the python files can use the api classes that are inside the jar file.

4

1 に答える 1

6

この方法で JavaScript 内で jar のクラスを使用できますが、実行するときに jar をクラス パスに設定する必要があります。私はJython/Pythonと同様の解決策を求めていましたが、Java内でjarを設定できますが、バッチファイルとshファイルを作成してそのように設定するだけです(今はそのようにする方が簡単なようです)。これが私のために働く私の解決策です。

コンパイルして実行するには:

    cd C:\your\directory\folder\with\the\javascript\and\java\files

    javac -d . ClassSpy.java FileSearch.java HelloWorld.java Main.java Parameters.java Run.java

    java -cp ./;C:\ABCAPI\bin\abcapi.jar hammer.main.Main gui=true input=JavaScriptStatus.js

上記の行に関するコメント:

  • コンパイル時に、-d .定義したパッケージとしてJavaファイルがあり、パッケージ名のフォルダーにそれらを配置する場合に使用できます。それが明確でない場合は、この投稿をチェックしてください (私は仕事をやめています) How to compile packages in java? .

  • もう1つの注意点は、実行したときに、クラスパスを-cp表す2つのものをクラスパスに追加したことです。その後は、この現在の実行のクラスパスに追加されます。これらはセミコロンで区切ることができます。./現在のディレクトリをクラスパスに追加し、その後に追加した残りは、必要な API の jar ファイルの場所でした。

  • hammer.main は、プログラムを開始するためのメイン関数を含むクラスである Main クラスのパッケージの場所です。

  • その後の 2 つの引数は、私のプログラムに固有のものであり、Java ScriptEngine に読み取って実行するように指示する JavaScript ファイルを見ることができます。

JavaScript 内で Jar ファイルを使用するには:

jar ファイルがクラス パス上にあり、表示されているので、その jar ファイル内からパッケージを取得し、パッケージからクラスを呼び出すことができます。したがって、以下の例でabc.foo.pack.nameは、パッケージ内にabcapi.jarあり、私が使用ClassFromTheJarFileAnotherClassFromTheJarFileていてそのパッケージに含まれている 2 つのクラスがあります。パッケージを変数に設定し、使用するクラスの前にパッケージを含む変数を付ける手法を使用しています。別の方法はimportPackage(com.foo.bar)、クラスをインスタンス化するたびにクラスにプレフィックスを付ける必要はありませんが、この手法は何らかの理由で機能しません (おそらく私は何か間違ったことをしました)。いずれにせよ、次のコードは私にとってはうまく機能します。

    myvariable = Packages.abc.foo.pack.name;

    var foo = new myvariable.ClassFromTheJarFile("arg1","arg2");

    foo.doSomething();

    var fooSister = new myvariable.AnotherCLassFromTheJarFile("arg1");

    fooSister.doSomthingFromThisClass();

結論:

私の間違いは、このようにクラスを直接インポートしようとしていたことがわかりました。

    myvariable = Packages.abc.foo.pack.name.ClassFromTheJarFile;

それから私はそれを次のように使ってみました、

    var foo = new myvariable.ClassFromTheJarFile("arg1","arg2");

これは機能していませんでした。

「Java と JavaScript は 2 つの異なるものであることをご存知でしょう」などのコメントがたくさん寄せられていたので、これが誰かの役に立てば幸いです。はい、私はそれを知っています、あなたのポイントは何ですか?

心に留めておいてください:

私はブラウザやインターネット上でこれを使用していません。私はJava ScriptEngineを通じてこれを使用しています。URL から jar ファイルを取得する必要がある場合は、私が見つけたこのリンクが役立つかもしれませんhttp://mozilla-firefox-extension-dev.blogspot.com/2004/11/calling-java-code-in-custom-jars- from.html

于 2014-07-05T19:50:36.163 に答える