Возможно ли с помощью первого проекта запустить другой и после компиляции вывести результат с консоли в первый проект?)
Артем Міньковський
19 рівень
Запустить в одном проекте другой
Відповідь знайдено
Коментарі (5)
- популярні
- нові
- старі
Щоб залишити коментар,
потрібно ввійти в систему
Стас Пасинков
Software Developer в ZipyMaster
18 грудня 2023, 00:17
думаю шо ні.
а шо саме ви хочете зробити? може є варіант попрощє
0
Артем Міньковський
18 грудня 2023, 06:37
Графічіний інтерфейс програми було створено за допомогою JavaFX, а сама програма повинна чимось нагадувати рівні на JavaRush.
В мене вийшло зробити щоб після натискання кнопки текст, що знаходяться в полі Edit зберігається у файл. Наступним кроком відкривається інший проект та створюється(або відкриваєть) клас Main в який вставляється код з файлу.
Як зробити потім щоб програма скомпілювалася та повернула результат виконання не можу зрозуміти, можливо є інший спосіб реалізувати таку програму?
Код:
0
Артем Міньковський
18 грудня 2023, 06:37
package com.example.demo2;
***
import java.nio.file.Paths;
public class HelloController {
@FXML
private Button button1;
@FXML
private Button button2;
@FXML
private Button button3;
@FXML
private TextArea edit1;
@FXML
private Label label1;
@FXML
void btnClick1(ActionEvent event) {
String textToSave = edit1.getText();
saveTextToFile(textToSave, "test2/src/Main.java");
}
@FXML
void btnClick2(ActionEvent event) {
String fileName = "test2/src/Main.java";
String result = compileAndRunCode(fileName);
label1.setText(result);
}
@FXML
void btnClick3(ActionEvent event) {
}
private void saveTextToFile(String text, String fileName) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))) {
writer.write(text);
} catch (IOException e) {
e.printStackTrace();
}
}
private String compileAndRunCode(String fileName) {
try {
String code = new String(Files.readAllBytes(Paths.get(fileName)));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
System.setOut(ps);
Class<?> dynamicCodeClass = Class.forName("com.example.demo2.Main");
dynamicCodeClass.getMethod("main", String[].class).invoke(null, (Object) null);
System.out.flush();
System.setOut(new PrintStream(new OutputStream() {
@Override
public void write(int b) {
label1.setText(label1.getText() + (char) b);
}
}));
return baos.toString();
} catch (Exception e) {
e.printStackTrace();
return "Exception: " + e.getMessage();
}
}
}
0
Стас Пасинков
Software Developer в ZipyMaster
18 грудня 2023, 12:24
я так розумію, вам треба запустити код, який написав юзер у формочку?
можете це зробити у одному проекті, у одній програмі.
гляньте шо пропонують отут
не забудьте, що перед запуском варто перевірити чи компілюється код юзера взагалі)
більше прикладів можете знайти тут
щоб "перехопити" вивід на екран з програми юзера - можете підмінити System.out (на джавараші була така задача).
щоб вводити шось якісь дані у програму юзера - спробуйте шось нагугліть аналогічне і про System.in
ну а потім ще подивіться на фреймворки для тестування коду, такі як JUnit чи TestNG
+1
Артем Міньковський
18 грудня 2023, 18:23
Щиро дякую, запрацювало
+1