java - 运行用户创建的 Java 类

标签 java class instantiation

在我的主程序中,我允许用户创建 Java 类并将它们存储在 UserInputs 包内的 .java 文件中。我现在正在寻找一种方法来在我的主程序中实例化用户创建的类,并在类中运行公共(public)方法。

这是当用户按下 JButton 完成创建类时执行的代码。

public void actionPerformed(ActionEvent e) {

    if(e.getSource() == inputButt.getButtons()){
        try{

            PrintWriter writer = new PrintWriter("C:/Users/human/Desktop/UserInputTest/src/UserInputs/UserCreatedClass.java", "UTF-8");
            writer.println(textArea.getText());
            writer.close();

        }catch(Exception except){
            except.printStackTrace();
        }
    }   
}

最佳答案

您需要在运行时编译该文件。也许thisthis在这里发帖对您有帮助。

第一个链接说的是您应该使用 Java 6 Compiler API。您需要做的是:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int compilationResult = compiler.run(null, null, null, fileToCompile);

其中 fileToCompile 是文件的路径,在您的情况下为“C:/Users/human/Desktop/UserInputTest/src/UserInputs/UserCreatedClass.java”。然后就可以通过Reflection来执行代码了。

不过,我会非常谨慎地让人们创建和执行他们自己的 Java 代码。我不知道您打算做什么,但如果您在服务器上运行此代码,我不建议您这样做。如果该应用程序应在客户端计算机上本地运行(因此它们只能伤害自己),这应该不是问题。否则我不会让他们编程他们想要的东西。

关于java - 运行用户创建的 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19961208/

相关文章:

c++ - 如何约束模板化 constexpr 递归函数输入参数

java - 小程序内的 JAXB - 找不到 package-info.class

java - 手动实现RSA java。填充想法

python - 重新定义子类的 __init__ 以采用不同的参数

javascript - TypeScript 类到另一个类

php - 什么决定了类对象在 PHP 中何时被销毁?

java - IZpack - 如何使用 IZPack 安装 JRE?

java - BeanIo 无法读取特殊字符

python - 使用Python计算坡度的程序

java - 如何从抽象类实例化子类对象中访问子类方法