3

実行時(「永続的な」プログラムの実行中)に実行するJavaコマンド/コードを同じ方法で、または可能な限り同じコードに近い形で入力できるようにしたいと考えています。 jTextAreaのようなGUI要素を使用して、プログラム(ソフトウェアの一部としてプログラムされた)のソースコード。


次の StackOverflow の質問は関連しているようですが、それらの回答とともに、私が探しているものではないようです。

Javaでコンソールクラスから入力を取得する方法は?

Java でのコンソール入出力に GUI を使用する

これらの質問と回答で説明されているコンソールアプリケーションの場合のように、「特定のコンソール入力からアクションをトリガーし、フィードバックをコンソールに出力できる」ようにしたくありません。

私が望むのは、「コンソール(またはGUI)入力から、予測も制御もできない実際のJavaコードを実行できるようにすること」です。

注: ここでの「予測も制御もできない」とは、「開発者」を指します...しかし、もちろん、「ユーザー」が行うように、コードを入力するのであれば予測して「制御」できます。


Java は仮想マシン環境を使用しているため、「実行時に入力されたコード」を実行できる可能性があると思います...しかし、そのようなことが可能かどうかはわかりません。

たとえばfor(int i=0; i<3; i++){System.out.println(i);}、「GUI コンソール」(jTextArea など) の実行時入力を、Enter キーを押すか、「送信」ボタンをクリックすると、(「コンパイルされて」「?」実行される)、元のソースコードの一部であるかのように同じ出力を与えるため、次のようになります。

0
1
2

そこで、次のことを知りたいです。

  • 出来ますか?
  • はいの場合、どうすればできますか?(または、いいえの場合、最も近い代替手段は何ですか?)
4

4 に答える 4

2

を使用しJavaCompilerます。からコードをコンパイルできますString

EG については、STBCと特にソース コードを参照してください。GUI を提供し、ボタンのクリックでテキスト領域のコードをコンパイルできます。

STBC GUI

ただし、次の点に注意してください。

システム要求

STBC は、バージョン 1.6 以降の Java Plug-In * JDK (AKA SDK) を搭載した任意のコンピューターで実行されます。

(*) STBC が使用する API はtools.jar、JDK でのみ配布されるコンパイラへのパブリック インターフェイスにすぎません (ただし、JDK の「パブリック JRE」も を取得するようですtools.jar)。これにより、ネイティブ jar または Web Start アプリのいずれかを実行する際に、いくつかの異常な要件が発生します。

于 2012-05-04T20:43:02.487 に答える
2

この質問の回答にあるように、JavaCompilerを使用できます。

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

また、あなたがやりたいことはevaluateofStringですcode

ただし、あまりお勧めしません。

于 2012-05-04T20:34:17.647 に答える
1

BeanShellというプロジェクトがあります。

「要するに、BeanShell は動的に解釈される Java に加えて、スクリプト言語と柔軟な環境がすべて 1 つのクリーンなパッケージにまとめられたものです。」

于 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 に答える