【问题标题】:Execute Java code in Java [duplicate]在Java中执行Java代码[重复]
【发布时间】:2011-12-28 21:43:56
【问题描述】:

可能重复:
Convert String to code in Java
Dynamic code execution on Java

我有一个字符串,其中包含:
"for(int i=0 ; i<5 ; i++){System.out.println(\"*\");}"
我可以在Java中执行这个String中的代码吗?

【问题讨论】:

  • 你可以使用JavaCompiler接口,但我不知道细节。
  • 如果您可以选择不使用 java 作为输入,请使用 JavaScript 并通过 Java Scripting API 运行您的代码
  • 这段代码的重要性是什么?您是否在一些实际应用中使用此代码?
  • @Lion - 是的,我在实际应用程序中使用它。但现在我使用的是 JavaScript 代码字符串而不是 Java 代码。

标签: java string


【解决方案1】:

从 Java 6 开始,您可以使用 SDK 中的标准 API 编译和运行定义为字符串或文件的 Java 编译单元(编译单元基本上就是一切位于 .java 文件中 - 包、导入、类/接口/枚举),看看这个example。但是,您不能像问题中的那样运行任意 Java sn-p。

如果可能的话,最好嵌入一种不同的脚本语言,让您可以从 Java 程序运行 sn-ps 代码 - 例如,JavaScript、Groovy、MVELBeanShell等。

【讨论】:

    【解决方案2】:

    如果你把它变成一个完整的源文件,你可以通过编程将它提供给 java 编译器,但是上次我检查了它只有在你的机器上安装了 java SDK 时才可用;它在具有 Java 客户端分发的机器上不可用。当然,从那时起,这可能已经发生了变化。查看 com.sun.tools.javac 包,您会在其中找到 java 编译器 API。

    【讨论】:

      【解决方案3】:

      也许您可以将其作为 Groovy 运行:

      http://groovy.codehaus.org/Embedding+Groovy

      【讨论】:

        【解决方案4】:

        没有用于执行此操作的 Java Core API 函数,但您可以通过使用 Runtime.exec 或使用来自 com.sun.tools.javac 的一些“不安全”类来调用 javac,这是一个示例:

        http://juixe.com/techknow/index.php/2006/12/12/invoke-javac-at-runtime/

        【讨论】:

          【解决方案5】:

          我认为您不能执行包含 java 代码的字符串。

          但是如果你可以将它保存为java源文件并尝试使用ProcessBuilder类来执行,那么值得一试。

          从未尝试过,也不确定这是否是最好的方法。所以请谨慎使用:)

          祝你好运!

          还发现了一个类似的帖子:Runtime class in java

          【讨论】:

            【解决方案6】:

            不,您不能在程序中执行此代码。

            【讨论】:

            • 是的,也有例外,但这是一种“如果你不得不问”之类的事情——如果你还不明白这是不可能的,那就不可能了。如果你明白这是不可能的(以及为什么),那么它就成为可能(至少在某些情况下),使用几种肮脏技巧的组合。
            猜你喜欢
            • 1970-01-01
            • 2019-06-11
            • 2020-02-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多