我有一个计算目录大小的线程.
我使用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) 我有一个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,也许与绑定?
我正在使用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?