相关疑难解决方法(0)

通过具有简单自定义日志记录框架的线程将消息记录到JavaFX TextArea的最有效方法

我有一个简单的自定义日志框架,如下所示:

package something;

import javafx.scene.control.TextArea;

public class MyLogger {
    public final TextArea textArea;

    private boolean verboseMode = false;
    private boolean debugMode = false;

    public MyLogger(final TextArea textArea) {
        this.textArea = textArea;
    }

    public MyLogger setVerboseMode(boolean value) {
        verboseMode = value;
        return this;
    }

    public MyLogger setDebugMode(boolean value) {
        debugMode = value;
        return this;
    }

    public boolean writeMessage(String msg) {
        textArea.appendText(msg);
        return true;
    }

    public boolean logMessage(String msg) {
        return writeMessage(msg + "\n");
    }

    public boolean logWarning(String msg) {
        return writeMessage("Warning: …
Run Code Online (Sandbox Code Playgroud)

java logging multithreading textarea javafx

10
推荐指数
1
解决办法
1万
查看次数

JavaFX将文本附加到TextArea会抛出异常

答案:JavaFX将文本附加到TextArea会抛出异常

我有一个计算目录大小的线程.

我使用walkFileTree.

为了获得一些信息,我将actuall文件追加到textarea.

但是当我有很多文件(例如> 300)时,我得到了

线程"JavaFX Application Thread"中的异常java.lang.ArrayIndexOutOfBoundsException

这是代码:

private void startScheduledExecutorService() {

        Thread dt = new Thread(new Runnable() {
            public void run() {
                try {
                    taStatus.appendText("Dateien werden ermittelt\n");
                    Files.walkFileTree(quellOrdner.toPath(), new SimpleFileVisitor<Path>() {
                        @Override
                        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
                            size += attrs.size();
                            files++;
                            taStatus.appendText(file.toString() + "\n");
                            return FileVisitResult.CONTINUE;
                        }

                    });
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }, "dt");
        dt.setDaemon(true);
        dt.start();
    }
Run Code Online (Sandbox Code Playgroud)

当我创建一个ArrayList并将每个文件添加到它并将此ArrayList(一行中的每个条目)附加到TextArea时,它正在工作.

它看起来像线程速度的问题?

完整的例外

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
    at com.sun.javafx.text.PrismTextLayout.addTextRun(PrismTextLayout.java:755)
    at …
Run Code Online (Sandbox Code Playgroud)

java multithreading textarea javafx-8

8
推荐指数
1
解决办法
6386
查看次数

标签 统计

java ×2

multithreading ×2

textarea ×2

javafx ×1

javafx-8 ×1

logging ×1