Вы можете поймать все, что печатается через System.out
используя System.setOut
так:
import java.io.*;
class SystemOutLogging {
public static void main(String[] args) throws IOException,
ClassNotFoundException {
final PrintStream original = System.out;
System.setOut(new PrintStream("programlog.txt") {
public void println(String str) {
process(str + "\n");
}
public void print(String str) {
process(str);
}
private void process(String str) {
// Fill some JEditorPane
original.println("Program printed: \"" + str + "\"");
}
});
System.out.print("Hello ");
System.out.println(" World");
}
}
распечаток:
Program printed: "Hello "
Program printed: " World
"
(Там является System.setErr
и System.setIn
, который работает аналогичным образом.)
Если вы хотите поймать материал, который «подпрограмма» печатает через System.out.println
, у вас проблемы, потому что System.out
является статическим, поэтому, если вы запускаете несколько «подпрограмм», вы получите беспорядок (поскольку вы не можете выделите для каждой подпрограммы отдельный класс System
).
В такой ситуации я честно считаю, что было бы лучше начать отдельный процесс через ProcessBuilder. Стандартные потоки ввода/вывода результирующего процесса могут быть легко записаны.
(PS Когда я думаю об этом, вероятно, можно проверить текущую группу потоков в println
реализации, а также от того, решить, какие подпрограммы, которые на самом деле применит println
метод)
IDE, такие как NetBeans, похоже, не имеют проблем с захватом вызовов System.out с несколькими программами. Кроме того, это не относится к вопросу о размещении всех вызовов в JEditorPane. – Supuhstar
NetBeans и Eclipse - чрезвычайно сложные части программного обеспечения. Не ожидайте, что сможете реплицировать свои системы. Приведенный мною пример дает вам «процесс» -метод. Вы делаете все, что вам нужно, со строками в этом методе. Добавление к JEditorPane не должно быть слишком сложным с этой точки. – aioobe
, хотя это правда, что один программист должен взломать перед тем, как попытаться что-то сделать размером Eclipse или NetBeans, они все еще просто программы. Репликация части их функциональности (в этом случае вывод процесса обработки) не обязательно является трудной или чем-то вне разумных ожиданий. –