有没有办法在您不知道程序名称的情况下 运行 一个 Java 程序?

Is there a way to run a Java Program when you don't know its name?

我正在使用 LWJGL 制作游戏引擎。使用它的开发人员必须能够使用脚本。我决定只让他们使用 Java,因为用另一种语言编写 API 是我没有时间和经验去做的事情。无论如何,我会使用 x.main(); 到 运行 它,但是开发人员告诉脚本的名称是什么,并将其存储在一个变量中。我只是想我可以 运行 一个命令来做到这一点,使用 python 中的 exec() 或 JavaScript 中的 eval() 之类的方法。我找不到具有此执行功能的库,即使有,它也不够简单,我无法全神贯注。如果您不知道任何具有此功能的库,但有一些我应该尝试的建议,我很乐意听取。

为了总结这一段,我需要一个 Java 库,它可以使用像 JavaScript 的 eval() 或 python 的 exec()

如有任何帮助,我们将不胜感激。

我不知道我是否理解这个问题,但我专注于将“脚本名称存储为变量”的一部分,这对我来说听起来像是一个方法名称。您可以使用反射

按名称调用方法
public class MCAlu {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        String scriptName = "sayHello";
        Method scriptMethod = MyScript.class.getMethod(scriptName);
        scriptMethod.invoke(null, null);
    }
}

class MyScript {
    public static void sayHello() {
        System.out.println("Hi there!");
    }
}

由于必须知道 class 并且在 class 路径上(除非您将在运行时加载它),因此 class 名称也可以作为字符串提供,从而导致

String scriptClass="MyScript";
String scriptName = "sayHello";
Method scriptMethod = Class.forName(scriptClass).getMethod(scriptName);
scriptMethod.invoke(null, null);

一个(非常流行的)工具可以帮助您 运行 Java 作为脚本的来源是 JBang。 Java 程序 被编译(到 Java class 文件)能够被 JVM 运行。所以,基本上,JBang 隐藏了这个编译步骤并使用我们编译的 class.

调用 JVM