3

我希望能够以相同的方式或尽可能接近的方式输入要在运行时(执行“持久”程序期间)执行的 java 命令/代码,如果存在,将执行相同的代码在程序的源代码上(作为软件的一部分编程),使用 GUI 元素,如 jTextArea。


以下 StackOverflow 问题似乎是相关的,但是,连同他们的答案,似乎并不是我想要的。

如何从 Java 中的控制台类获取输入?

在 java 中使用 GUI 进行控制台输入和输出

不想“能够从特定的控制台输入触发操作,并将反馈打印到控制台”,这似乎是这些问题和答案中描述的控制台应用程序的情况。

我想要的是“能够从控制台(或 GUI)输入执行我无法预测或控制的实际 Java 代码”。

注意:这里的“我无法预测也无法控制”是指“开发人员”......但是如果我是输入代码的人,我当然可以预测和“控制”它,就像“用户”所做的那样。


由于java使用虚拟机环境,我认为它可能执行“运行时输入代码”......但我不确定这样的事情是否可能。

例如,我希望for(int i=0; i<3; i++){System.out.println(i);}在“GUI 控制台”(例如 jTextArea)中的运行时输入,在按下回车键或单击“发送”按钮后,执行(“编译和”?),并给出与原始源代码的一部分相同的输出,因此:

0
1
2

所以我想知道以下内容:

  • 是否可以?
  • 如果是,我该怎么做?(或者,如果不是,最接近的选择是什么?)
4

4 回答 4

2

您可以使用JavaCompiler,因为这个问题的答案指出:

https://stackoverflow.com/a/935316/420001

此外,您想要做evaluateStringcode

虽然不是很推荐。

于 2012-05-04T20:34:17.647 回答
2

使用JavaCompiler. 它可以从String.

对于 EG,请参见STBC,尤其是源代码。它提供了一个 GUI,并且可以在按钮单击时编译文本区域中的代码。

机顶盒图形用户界面

但请注意:

系统要求

STBC 将在任何具有 1.6+ Java Plug-In * JDK (AKA SDK) 版本的计算机上运行。

(*) STBC 使用的 API 只是编译器的公共接口,tools.jar仅与 JDK 一起分发(尽管 JDK 的“公共 JRE”似乎也获得了tools.jar. 这导致在运行本机 jar 或 Web 启动应用程序时出现一些不寻常的要求。

于 2012-05-04T20:43:02.487 回答
1

有一个项目叫BeanShell

“简而言之,BeanShell 是动态解释的 Java,加上脚本语言和灵活的环境都整合到一个干净的包中。”

于 2012-05-04T20:37:19.900 回答
0

我知道这是一个旧答案,但对于未来的 Google 员工:

我会推荐JavaREPL,其源代码可在此处获得: https ://github.com/albertlatacz/java-repl

AlmightyR要求的是 JavaREPL 提供的 Java 语言的 Read-Eval-Print-Loop (REPL) 。

JavaREPL 有一个在线演示:http ://www.javarepl.com/console.html

JavaREPL 还有一个 Intellij 插件和一个 CLI 版本,它们都链接到 Github 存储库中。

它目前看起来有点被遗弃,但也许它不需要维护?

于 2016-03-30T13:15:39.537 回答