首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用node-java模块在.js文件中导入自己的java类?

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

Stack Overflow用户
提问于 2019-10-14 00:03:27
回答 3查看 1.3K关注 0票数 0

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

我在同一个文件夹下有两个名为'Code‘的文件,其中一个是test.js,其中包含以下代码:

代码语言:javascript
复制
let java= require('java');

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

另一个文件是MySumClass.java:

代码语言:javascript
复制
public class MySumClass{
    public static int sum(int a, int b){
        return a+b;
    }
}

但是,当我尝试运行test.js文件(./Code> node test.js)时,node.js命令提示符显示:

代码语言:javascript
复制
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模块的导入函数。任何帮助都将不胜感激!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-14 00:45:48

默认情况下,node-java只提供默认Java运行时库中的对象。您自己定义的类(如MySumClass)需要编译并添加到类路径中,然后才能导入和使用它们。

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

代码语言:javascript
复制
java.classpath.push('MySumClass.class');
票数 0
EN

Stack Overflow用户

发布于 2019-10-20 01:50:14

经过多次尝试,以下是对我有效的方法:(test.jar与其他文件位于相同的目录中)

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2021-11-30 02:44:38

我所做的基本上是遵循OP的answer,但我事先已经创建了.jar文件。为此,我只是在test.java中准备了我的自定义类

代码语言:javascript
复制
import java.lang.System;

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

然后

代码语言:javascript
复制
javac Test.java
jar cf test.jar Test.class

现在,您应该可以看到创建的.jar。从这一点上,您可以从Javascript访问它:

代码语言:javascript
复制
let java= require('java');
java.classpath.push('test.jar');

let test = java.import("Test");
test.main(null) // should print "Hello, World!"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58365349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档