小编Gar*_*rog的帖子

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
查看次数

JavaFX ChangeListener并不总是有效

我有一个JavaFX应用程序,并在那里有一个并发任务.当Task正在运行时,我想将updateMessage()中的消息附加到TextArea

因为绑定不会将新文本追加到TextArea,所以我使用了ChangeListener

worker.messageProperty().addListener((observable, oldValue, newValue) -> {
    ta_Statusbereich.appendText("\n" + newValue);
});
Run Code Online (Sandbox Code Playgroud)

这是有效的,但不是每一次改变.我用System.out.println()检查了它,并在1到300的任务中计算

for (Integer i = 1; i <= 300; i++) {
    updateMessage(i.toString());
    System.out.println(i.toString());
}
Run Code Online (Sandbox Code Playgroud)

任务中的println()给了我想要的1,2,3,4,5,6,7,8等等,但我的TextArea显示1,4,5,8,9我然后添加了一个println ChangeListener得到相同的结果,1,4,5,8,9(结果是随机的,不总是1,4,5 ......)

为什么?有没有其他方法将消息文本附加到TextAres,也许与绑定?

java concurrency javafx changelistener

6
推荐指数
1
解决办法
3576
查看次数

JavaFX在没有控制器的fxml中包含fxml

我正在使用javafx编写应用程序.这是一个"多屏"应用程序,带有一个主菜单,可以从中切换场景.

我的场景在不同的fxml文件中定义.

因为我尝试使用mvc模式我没有在fxml文件中设置控制器,我在FXMLloader上使用setController.

一切都运行正常,但我在单独的控制器和单独的fxml文件中有onmen的mainmenu及其所有功能.

我试过了

<fx:include source="Menubar.fxml"/>
Run Code Online (Sandbox Code Playgroud)

并为fxml文件创建了一个控制器,当我在fxml文件中设置控制器时,我无法编译源代码.如何为包含的fxml文件设置控制器?

startpage.fxml获取其控制器"Startpage"

FXMLLoader loader = new FXMLLoader(getClass().getResource("../fxml/startpage.fxml"));
        loader.setController(new Startpage(m));
        Pane mainPane = loader.load();
Run Code Online (Sandbox Code Playgroud)

startpage.fxml包括menubar.fxml,如何为菜单栏控件设置控制器?或者如何在每个其他控制器中轻松包含menubarController?

model-view-controller controller javafx fxml

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