Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将控制台输出重定向到JavaFXTextArea?_Java_Javafx_Console_Fxml - Fatal编程技术网

将控制台输出重定向到JavaFXTextArea?

将控制台输出重定向到JavaFXTextArea?,java,javafx,console,fxml,Java,Javafx,Console,Fxml,我想在JavaFX文本区域中显示控制台输出。。。不幸的是,我找不到任何JavaFX的工作示例,而只找到javaswing的工作示例,这在我的例子中似乎不起作用 编辑: 我试着效仿这个例子: 并扩展了我的代码,如下所示。然而,在我的EclipseIDE中不再有控制台输出,但在我的文本区域中也没有输出。知道我哪里做错了吗 public class Activity extends OutputStream implements Initializable { @FXML public static

我想在JavaFX文本区域中显示控制台输出。。。不幸的是,我找不到任何JavaFX的工作示例,而只找到javaswing的工作示例,这在我的例子中似乎不起作用

编辑:

我试着效仿这个例子:

并扩展了我的代码,如下所示。然而,在我的EclipseIDE中不再有控制台输出,但在我的文本区域中也没有输出。知道我哪里做错了吗

public class Activity extends OutputStream implements Initializable {

@FXML
public static TextArea taRecentActivity;

public Activity() {
    // TODO Auto-generated constructor stub
}

@Override
public void initialize(URL location, ResourceBundle resources) {

    OutputStream out = new OutputStream() {
        @Override
        public void write(int b) throws IOException {
            updateTextArea(String.valueOf((char) b));
        }

        @Override
        public void write(byte[] b, int off, int len) throws IOException {
            updateTextArea(new String(b, off, len));
        }

        @Override
        public void write(byte[] b) throws IOException {
            write(b, 0, b.length);
        }
    };

    System.setOut(new PrintStream(out, true));
    System.setErr(new PrintStream(out, true));
}

private void updateTextArea(final String text) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            taRecentActivity.appendText(text);
        }
    });
}

@Override
public void write(int arg0) throws IOException {
    // TODO Auto-generated method stub

}
}

我就是这么做的,而且成功了。虽然它是非常缓慢的大量文本

public void appendText(String str) {
    Platform.runLater(() -> textField.appendText(str));
}


您的意思是要捕获System.out和/或System.err,还是要捕获通过众多Java日志API之一记录的消息?是的,我的意思是捕获System.out和System.err,然后将其重定向到TextArea请解释在我的情况下似乎不起作用的意思。你有例外吗?如果你是,请张贴它的整个堆栈跟踪。另外,请注意,假设一个字节代表一个字符对于ASCII范围之外的文本内容来说是一个问题。。。因此,我想知道如何在JavaFX文本区域中显示控制台输出,因为我找不到任何有用的教程。我更新了我的代码并链接到一个教程,但仍然不起作用。有什么想法吗?是的,它有点慢,但是非常好-非常好用!非常感谢你的意见!只是一个问题。。。我正在使用您的解决方案将控制台附加到文本区域,但是我的netbeans控制台不再更新!有没有办法同时更新netbeans控制台和textarea?@thanili在初始化的第一行中,缓存当前的标准输出流:PrintStream defaultOut=System.out;。然后在writeint b方法中添加defaultOut.writeb;行;。
@Override
public void initialize(URL location, ResourceBundle resources) {
    OutputStream out = new OutputStream() {
        @Override
        public void write(int b) throws IOException {
            appendText(String.valueOf((char) b));
        }
    };
    System.setOut(new PrintStream(out, true));
}