如何使用JFrame在新窗口中打印java控制台?
我一直在做一个项目,就功能而言,它完全可以工作,但我只是把它打印到控制台上。我想用JFrame在一个新窗口中打印它,这样我就可以用它生成一个jar文件,并让它在不需要ide的情况下运行。如何将JFrame或其他工具添加到现有代码中,使其在新窗口中打印文本?Swing。。。 在中实施 JavaFX 上述实现的“非常基本”示例如何使用JFrame在新窗口中打印java控制台?,java,javafx,jframe,Java,Javafx,Jframe,我一直在做一个项目,就功能而言,它完全可以工作,但我只是把它打印到控制台上。我想用JFrame在一个新窗口中打印它,这样我就可以用它生成一个jar文件,并让它在不需要ide的情况下运行。如何将JFrame或其他工具添加到现有代码中,使其在新窗口中打印文本?Swing。。。 在中实施 JavaFX 上述实现的“非常基本”示例 import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; im
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.Date;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class Test extends Application {
@Override
public void start(Stage primaryStage) {
TextArea textArea = new TextArea();
PrintStream ps = System.out;
System.setOut(new PrintStream(new StreamCapturer("STDOUT", new Consumer() {
@Override
public void appendText(String text) {
Platform.runLater(new Runnable() {
@Override
public void run() {
textArea.appendText(text);
}
});
}
}, ps)));
BorderPane root = new BorderPane(textArea);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
Thread t = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Just going to output the current time");
try {
while (true) {
Thread.sleep(1000);
System.out.println(new Date());
}
} catch (InterruptedException ex) {
}
}
});
t.setDaemon(true);
t.start();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
public interface Consumer {
public void appendText(String text);
}
public class StreamCapturer extends OutputStream {
private StringBuilder buffer;
private String prefix;
private Consumer consumer;
private PrintStream old;
public StreamCapturer(String prefix, Consumer consumer, PrintStream old) {
this.prefix = prefix;
buffer = new StringBuilder(128);
buffer.append("[").append(prefix).append("] ");
this.old = old;
this.consumer = consumer;
}
@Override
public void write(int b) throws IOException {
char c = (char) b;
String value = Character.toString(c);
buffer.append(value);
if (value.equals("\n")) {
consumer.appendText(buffer.toString());
buffer.delete(0, buffer.length());
buffer.append("[").append(prefix).append("] ");
}
old.print(c);
}
}
}
仅供参考:JavaFX和
JFrame
是两种不同的技术,虽然建议的重复技术适用于Swing,但它应该(或多或少)易于修改以使用JavaFX运行。最终,更好的解决方案是使用适当的日志API