源码

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


答案:JavaFX append text to TextArea throws Exception

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

我使用walkFileTree.

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

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

Exception in thread “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() {
                        @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();
    }

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

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

完整的例外

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
    at com.sun.javafx.text.PrismTextLayout.addTextRun(PrismTextLayout.java:755)
    at com.sun.javafx.text.GlyphLayout.addTextRun(GlyphLayout.java:121)
    at com.sun.javafx.text.GlyphLayout.breakRuns(GlyphLayout.java:191)
    at com.sun.javafx.text.PrismTextLayout.buildRuns(PrismTextLayout.java:770)
    at com.sun.javafx.text.PrismTextLayout.layout(PrismTextLayout.java:1021)
    at com.sun.javafx.text.PrismTextLayout.ensureLayout(PrismTextLayout.java:223)
    at com.sun.javafx.text.PrismTextLayout.getBounds(PrismTextLayout.java:246)
    at javafx.scene.text.Text.getLogicalBounds(Text.java:358)
    at javafx.scene.text.Text.impl_computeGeomBounds(Text.java:1168)
    at javafx.scene.Node.updateGeomBounds(Node.java:3556)
    at javafx.scene.Node.getGeomBounds(Node.java:3509)
    at javafx.scene.Node.getLocalBounds(Node.java:3457)
    at javafx.scene.Node.updateTxBounds(Node.java:3620)
    at javafx.scene.Node.getTransformedBounds(Node.java:3403)
    at javafx.scene.Node.updateBounds(Node.java:538)
    at javafx.scene.Parent.updateBounds(Parent.java:1706)
    at javafx.scene.Parent.updateBounds(Parent.java:1706)
    at javafx.scene.Parent.updateBounds(Parent.java:1706)
    at javafx.scene.Parent.updateBounds(Parent.java:1706)
    at javafx.scene.Parent.updateBounds(Parent.java:1706)
    at javafx.scene.Parent.updateBounds(Parent.java:1706)
    at javafx.scene.Parent.updateBounds(Parent.java:1706)
    at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2404)
    at com.sun.javafx.tk.Toolkit.lambda$runPulse$30(Toolkit.java:314)
    at com.sun.javafx.tk.Toolkit$$Lambda$178/156290868.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:313)
    at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:340)
    at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:525)
    at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:505)
    at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$400(QuantumToolkit.java:334)
    at com.sun.javafx.tk.quantum.QuantumToolkit$$Lambda$47/104706045.run(Unknown Source)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
    at com.sun.glass.ui.gtk.GtkApplication.lambda$null$48(GtkApplication.java:139)
    at com.sun.glass.ui.gtk.GtkApplication$$Lambda$43/1086508417.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:745)
(0)

本文由 投稿者 创作,文章地址:https://blog.isoyu.com/archives/javafxjiangwenbenfujiadaotextareahuipaochuyichang.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:9月 26, 2019 at 06:13 下午

热评文章