簡體   English   中英

如何使用 node-java 模塊在 a.js 文件中導入自己的 java class?

[英]How to import your own java class inside a .js file with node-java module?

我安裝了 node-java 模塊( https://github.com/joeferner/node-java )。

我在同一個文件夾下有兩個名為“代碼”的文件,一個是 test.js,它具有以下代碼:

let java= require('java');

let mySumTest= java.import('MySumClass');
console.log(mySumTest.sum(2, 5));

另一個文件是 MySumClass.java:

public class MySumClass{
    public static int sum(int a, int b){
        return a+b;
    }
}

但是當我嘗試運行 test.js 文件(./Code> node test.js)時,node.js 命令提示符顯示:

Error: Could not create class MySumClass
java.lang.NoClassDefFoundError: MySumClass
Caused by: java.lang.ClassNotFoundException: MySumClass
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

我可能誤解了如何使用 node-java 模塊的 import function。 任何幫助,將不勝感激!

默認情況下, node-java將僅具有來自默認 Java 運行時庫的對象。 您自己定義的類(如MySumClass )需要先編譯並添加到您的類路徑中,然后才能導入和使用它們。

確保編譯MySumClass.java文件(例如使用javac )。 要將編譯后的文件添加到node-java使用的類路徑,您可以使用java.classpath

java.classpath.push('MySumClass.class');

經過大量嘗試,這對我有用:(test.jar 與其他文件位於同一目錄中)

let java= require('java');
java.classpath.push('test.jar');

let mySumTest= java.import("MySumClass");

/*
//this prints out undefined, don't know why
console.log(java.callStaticMethod("MySumClass", "sum", 2, 5, function(err, results){
    if(err){
        console.error(err);
        return;
    }
    else return results;
}));
*/

var result= java.callStaticMethodSync("MySumClass", "sum", 2, 5)
console.log(result)

我所做的基本上是遵循 OP 的回答,但我事先已經創建了.jar文件。 為此,我剛剛在 test.java 中准備了我的自定義test.java

import java.lang.System;

public class Test {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}

接着

javac Test.java
jar cf test.jar Test.class

現在您應該看到創建的.jar 從這一點上,您可以從 Javascript 訪問它:

let java= require('java');
java.classpath.push('test.jar');

let test = java.import("Test");
test.main(null) // should print "Hello, World!"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM