【问题标题】:How do you run a string as code? [duplicate]如何将字符串作为代码运行? [复制]
【发布时间】:2012-10-04 12:12:59
【问题描述】:

可能重复:
Convert String to code

我有一个程序需要能够将字符串作为代码执行。例如,我会有一个字符串:

public void do(int a, int b){
a++;
b--;
System.out.println(a);
System.out.println(b);
}

现在,如何让程序执行该字符串?

【问题讨论】:

  • 你试过什么?如果你不介意我问,你为什么要做那样的事情?
  • 我相信你正在寻找类似this的东西。
  • ideone 一直这样做。
  • @Vulcan - 它可能比这更复杂一些。我认为他们必须有某种沙箱或自定义运行时来防止恶意代码运行。

标签: java string execute


【解决方案1】:

您可以将此字符串包装在一个类中并使用Java Compiler API 对其进行编译。您必须运行 JDK 而不是 JRE。

【讨论】:

    【解决方案2】:

    看到这个similar question

    这个简单的答案是,这在 Java 中是做不到的。您可以通过尝试调用 javac 编译器来想出一些 hacky 方法,但我不确定您将如何真正加载或使用它。

    在一些脚本语言中,比如 Javascript 和 Lua,你可以使用 'eval' 类型的函数来尝试加载你的字符串并执行它。

    【讨论】:

    • 好吧,如果我把字符串放到一个文件中,然后代码会读取并执行呢?可以这样做吗?如果是这样,我将如何去做? (当我被这样的事情困住时,我讨厌它!)
    • 只是为了澄清一下,当我说“我将如何去做”时,我的意思是运行创建的文件。不是如何用java创建文件。我知道怎么做。 :P
    • 此时,您可能需要查看编译器 API,如下面的 Denis 所述。你可以在这里看到另一个类似的问题。 stackoverflow.com/questions/1064259/…
    • 我不能使用 Java Compiler API 有几个原因......也许如果我解释为什么我需要这个你可以帮助我想一个解决方案.. 基本上,我正在编写一个其他的程序人们将在其中编写需要能够执行的代码。当然,如果您使用文本字段或其他任何内容,则文本是一个字符串,我需要执行该字符串..这带来了一个两难选择..
    • 必须是他们编写的 Java 代码吗?如果它只是示例代码,请让他们用 Javascript 编写它并在其上运行 eval。如果它必须在 Java 中,你将不得不使用一个工具来编译它——你不能只评估它(除非你想编写自己的解析器)
    【解决方案3】:

    我不完全确定(我已经很久没有使用它了),但您也许可以使用BeanShell 来执行作为字符串的Java 代码。看看the docs 的一些例子。

    【讨论】:

      【解决方案4】:

      我认为问题是如何运行这个程序?答案是它需要包含在一个类定义中,以及一个“静态主”函数,以便 java 命令行工具可以在编译后运行它。

      【讨论】:

        【解决方案5】:

        看看Koala Dynamic Java,它接受文本并动态编译并运行它。

        【讨论】:

        • 这似乎自 2002 年以来就已经死了,但我跟踪了 DrJava 的一系列面包屑,它包含并扩展了 Dynamic Java
        猜你喜欢
        • 2020-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多