我正在研究一個應用程序,該應用程序搜索定向文件夾中的某些文件並將其打印在存儲在Main類中的TableView<myFile> foundFilesList
中。 myFile
只是延伸File
一點點。搜索使用後臺線程中的服務完成,它將找到的數據存儲到ObservableList<myFile> filesOfUser
。 我想在同樣的觀點,其中的TableView與文件位於顯示的查找文件的電流量TextField foundFilesAmount
- ResultsView
快速更新TextField時發生NullPointerException
爲了做到這一點,我添加了一個ListChangeListener
爲foundFilesList
到ResultsView
控制器,使用方法setText
打印目前尺寸爲filesOfUser
。它看起來像:
Main.filesOfUser.addListener(new ListChangeListener<myFile>() {
@Override
public void onChanged(Change<? extends myFile> c) {
while (c.next()){
if (c.wasAdded())
setCounter(c.getAddedSize());
}
}
});
void setCounter (int number)
只包含
int currValue = Integer.valueOf(foundFilesAmount.getText());
foundFilesAmount.setText(String.valueOf(currValue + number));
而現在的問題是什麼。包含當前數量查找文件的文本字段更新速度非常快,從一刻起停止執行。在控制檯中,我看到很多來自JavaFX Application Thread的重複的NullPointerException's
。它的內容:
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at com.sun.javafx.text.PrismTextLayout.getRuns(PrismTextLayout.java:236)
at javafx.scene.text.Text.getRuns(Text.java:317)
at javafx.scene.text.Text.updatePGText(Text.java:1465)
at javafx.scene.text.Text.impl_updatePeer(Text.java:1500)
at javafx.scene.Node.impl_syncPeer(Node.java:503)
at javafx.scene.Scene$ScenePulseListener.synchronizeSceneNodes(Scene.java:2290)
at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2419)
at com.sun.javafx.tk.Toolkit.lambda$runPulse$30(Toolkit.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:354)
at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:381)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:510)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:490)
at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$404(QuantumToolkit.java:319)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)
我試着用setText
,只喜歡第5',10'th,15'th更新等之後,但如果搜索工作不再foundFilesAmount
更新值之前設置的排序延時,異常仍然被拋出。
是否有正確的方法來顯示當前發現文件的數量,其中包含實際的金額,並沒有造成太多的例外?
在此先感謝。
搜索本身是由'SimpleFileVisitor'在單獨的類來完成。從任務我只能通過'Files.walkFileTree'開始搜索。如果我嘗試使用來自控制器的方法,那更新我的textField,在這個單獨的類中,我得到'NullPointerException',導致textField不在其他線程中inizialised。這就是我在那裏使用'ListChangeListener'的原因。 – Lexx129