Вопрос по java, io, compilation, console, runtime – Как выполнить консольный или графический ввод, как если бы это был настоящий код Java?

3

Я хочу иметь возможность вводить команды / код Java для выполнения во время выполнения (во время выполнения «постоянной» программы) таким же образом или как можно ближе к тому же коду, который был бы выполнен, если бы он был присутствует в исходном коде для программы (запрограммированной как часть программного обеспечения), используя элемент GUI, такой как jTextArea.

Следующие вопросы StackOverflow кажутся связанными, но, наряду с их ответами, они, похоже, не являются тем, что я ищу.

Как получить вход из консольного класса в Java?

Использование GUI для консольного ввода и вывода в Java

яdon't хотите "иметь возможность инициировать действия с определенных входов консоли и печатать обратную связь в консоль", как, по-видимому, в случае консольных приложений, описанных в этих вопросах и ответах.

То, что я хочу, - это «иметь возможность выполнять фактический код Java, который я не могу ни предсказать, ни контролировать из ввода с консоли (или с графическим интерфейсом)».

NOTE: The "i cannot predict nor control" here refers to the "developer"...But of course i can predict and "control" it if i'm the one inputting the code, as the "user" would do.

Поскольку java использует среду виртуальной машины, я думаю, что он мог бы выполнить «код, введенный во время выполнения» ... Но я не уверен, что такая вещь даже возможна.

Например, мне нравится ввод во время выполненияfor(int i=0; i<3; i++){System.out.println(i);} в & quot; консоли GUI & quot; (например, jTextArea), чтобы после нажатия клавиши ввода или нажатия кнопки «Отправить» кнопку, выполняются (& quot; скомпилированы и & quot ;?) и дают тот же вывод, как если бы он был частью исходного исходного кода, таким образом:

0
1
2

Поэтому я хотел бы знать следующее:

Is it possible? If yes, how can i do it? (OR, if no, what is the closest alternative?)
я думаю, что это будет называться отражением Randy
Это нелегко на любом скомпилированном языке, JVM здесь не бонус. Это возможно, но в лучшем случае нетривиально. Marko Topolnik
Это совершенно тривиально; есть API компиляции Java, просто поместите код в основную функцию и временный класс. Оболочка бобов IMO, JRuby, groovy и т. Д. Через API сценариев будет проще. Хоть. В любом случае, не сложно. @ Рэнди, а не отражение. Dave Newton

Ваш Ответ

4   ответа
0

Я знаю, что это старый ответ, но для будущих Googlers:

Я бы посоветовалJavaREPL чей источник доступен здесь: https://github.com/albertlatacz/java-repl

КакиеAlmightyR запрашивается называется Read-Eval-Print-Loop (REPL) для языка Java, который обеспечивает JavaREPL.

JavaREPL имеет онлайн-демонстрацию, доступную здесь:http://www.javarepl.com/console.html

JavaREPL также имеет плагин Intellij и версию CLI, которые связаны с хранилищем Github.

Это выглядит как заброшенный в настоящее время, но, возможно, его просто не нужно поддерживать?

2

Ты можешь использоватьJavaCompilerответ на этот вопрос гласит:

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

Кроме того, то, что вы хотите сделать, этоevaluate String изcode:

Это не очень рекомендуется, хотя.

Ницца! Это именно то, что я искал! И теперь я знаю, как правильно на него ссылаться! («Оценить и преобразовать строку кода в компилируемый код, скомпилировать и выполнить ее» - на основе ваших и указанных исходных текстов) Большое спасибо, Джош! +1 вполне заслужен не только для первого ответа, но и потому, что он очень полезен и находчив. XenoRo
2

ИспользоватьJavaCompiler, Он может скомпилировать код изString.

Для Е.Г. увидетьSTBC & Амп; особенноисходный код, Он предоставляет графический интерфейс и может скомпилировать код в текстовой области по нажатию кнопки.

STBC GUI

Но обратите внимание:

System Requirements

STBC будет работать на любом компьютере с версией 1.6+ JavaPlug-In* JDK (AKA SDK).

(*) API, который использует STBC, является просто открытым интерфейсом к компилятору вtools.jar который распространяется только с JDK (хотя, по-видимому, «публичный JRE» JDK также приобретаетtools.jar). Это приводит к некоторым необычным требованиям при запуске собственного jar-файла или приложения веб-запуска.

Я также был вынужден проголосовать «@Josh» в качестве первого ответа, который предлагал то, что я собирался сделать. На самом деле, я подумал только о добавлении комментария, но подумал, что сделаю этот вопрос более справедливым в качестве ответа. :)
Жесткий Джош был первым, кто вам ответил, проще следовать, еще более изобретателен (жесткий доступ к примеру с исходным кодом был не таким прямым) и лучше отформатирован. +1 и выбрал. XenoRo
1

Есть проект под названиемBeanShell

"Короче говоря, BeanShell - это динамически интерпретируемая Java, а также язык сценариев и гибкая среда, объединенные в один чистый пакет. & Quot;

Похожие вопросы