У меня есть файл пролога (Экспертная система), с которым я консультируюсь из Java, используя библиотеки Jpl (org.jpl7.*), и у меня есть пользовательский интерфейс, в котором я хочу показать вывод запросов пролога. Это мой настраиваемый поток вывода, который должен перенаправлять каждый контент консоли в мой интерфейс (jTextAreaOUTPUT — это место, куда я перенаправляю контент)
public class CustomOutputStream extends OutputStream {
private JTextArea jTextAreaOUTPUT;
public CustomOutputStream(JTextArea textArea) {
jTextAreaOUTPUT = textArea;
}
@Override
public void write(int b) throws IOException {
// redirects data to the text area
jTextAreaOUTPUT.append(String.valueOf((char)b));
// scrolls the text area to the end of data
jTextAreaOUTPUT.setCaretPosition(jTextAreaOUTPUT.getDocument().getLength());
}
}
Вот несколько строк, которые у меня есть в моем классе интерфейса: это вызывает метод Custom Output Stream:
PrintStream printStream = new PrintStream(new CustomOutputStream(jTextAreaOUTPUT), true, "UTF-8");
// keeps reference of standard output stream
PrintStream standardOut = System.out;
System.setOut(printStream);
System.setErr(printStream);
По каким-то странным причинам он не работает с этим файлом пролога (я пробовал с другим, и он работает): пользовательский интерфейс зависает, а содержимое продолжает отображаться в консоли Java (eclipse). Файл экспертной системы работает с инструкцией write
в Прологе (например, write('Lorem Ipsum')
)
- Почему стандартный выход никогда не использовался? Это нормально объявлено таким образом?
- Есть ли способ принудительно перенаправить весь текст, который должен быть написан в консоли eclipse?
Я также пытался использовать метод «write Stream» в прологе, но (только для этого файла пролога, возможно, из-за рекурсии) пользовательский интерфейс зависает, даже если вывод записывается в txt файл.