Trả lời: JavaFX append text to TextArea throws ExceptionJavaFX nối văn bản vào TextArea ném Ngoại lệ
Tôi có một chuỗi tính toán kích thước của một thư mục.
Tôi sử dụng walkFileTree cho việc này.
Để nhận một số thông tin, tôi nối tệp actuall vào vùng văn bản.
Nhưng khi tôi có rất nhiều các tập tin (. Ex> 300) Tôi đã nhận
Exception in thread "JavaFX Application Chủ đề" java.lang.ArrayIndexOutOfBoundsException
Đây là mã:
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();
}
Khi tôi tạo một ArrayList và thêm từng tệp vào và thêm ArrayList này (mỗi mục nhập liên tiếp) vào TextArea, nó đang hoạt động.
Dường như vấn đề với tốc độ chỉ?
Các ngoại lệ đầy đủ
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)
Bạn nhận ngoại lệ đó từ dòng nào? – immibis
không nơi nào trong mã của tôi, tôi đã thêm toàn bộ Ngoại lệ – Garog
@ user3710098 Nếu taStatus là một phần tử ui, bạn có thể thử thêm 'Platform.runLater (() -> taStatus.appendText());' – varren