如何使用node-java模块将自己的java类导入.js文件中?

时间:2019-10-13 16:03:27

标签: java node.js

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

我在名为“ Code”的同一文件夹下有两个文件,一个是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>节点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模块的导入功能。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

默认情况下,node-java仅具有来自默认Java运行时库中的对象。您自己定义的类(例如MySumClass)必须先进行编译并添加到类路径中,然后才能导入和使用它们。

确保编译MySumClass.java文件(例如,使用javac)。要将编译的文件添加到node-java使用的类路径中,可以使用java.classpath

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

答案 1 :(得分:0)

经过大量尝试,这对我有用: (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)