Tôi có bộ điều khiển và ở đó tôi cố gắng lấy thư mục INBOX từ máy chủ e-mail. Với việc tải xuống mọi thứ đều ổn. Tôi có thể đặt dữ liệu này (chủ đề email, từ, ngày) vào TableView nhưng ... chỉ khi tôi đang đợi thread chịu trách nhiệm thiết lập dữ liệu này trong TableView. Code:NullPointerException trong phương thức khởi tạo JavaFX
// The table and columns
@FXML
TableView<MainModel.Item> itemTbl;
@FXML
TableColumn itemNameCol;
@FXML
TableColumn itemQtyCol;
@FXML
TableColumn itemTitleCol;
// The table's data
static ObservableList<MainModel.Item> data;
public void dataSet(){
// Set up the table data
itemNameCol.setCellValueFactory(
new PropertyValueFactory<MainModel.Item,String>("name")
);
itemQtyCol.setCellValueFactory(
new PropertyValueFactory<MainModel.Item,String>("qty")
);
itemTitleCol.setCellValueFactory(
new PropertyValueFactory<MainModel.Item,String>("title")
);
data = FXCollections.observableArrayList();
itemTbl.setItems(data);
}
public void setEnemyEvent() {
itemTbl.addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (event.getClickCount() == 2) {
if(itemTbl.getSelectionModel().getSelectedItem()!=null){
System.out.println(itemTbl.getSelectionModel().getSelectedItem().name);
}
}
}
});
}
@Override
public void initialize(URL url, ResourceBundle rb) {
setEnemyEvent();
dataSet();
Thread t = new Thread(new MessageLoop());
//HERE:
t.start();
//of course normally here is try and catch
t.join();
}
//staric nested class "for loop"
private static class MessageLoop implements Runnable {
public void run() {
try {
EmailConnetion con = new EmailConnetion();
MainModel MainModel = new MainModel();
for(int i=0;i<con.message.length;i++){
try{
MainModel.Item item = MainModel.new Item();
item.name.setValue(i+""+con.message[i].getFrom()[0].toString());
item.qty.setValue(con.message[i].getSentDate().toString());
item.title.setValue(con.message[i].getSubject().toString());
//Here is a problem.
data.add(item);//This indicate my IDE
//*****************
} catch(AddressException e) {
System.out.println("Error : " + "AddressException:"+i);
}
}
} catch (NoSuchProviderException ex) {
Logger.getLogger(SimpleController.class.getName()).log(Level.SEVERE, null, ex);
} catch (MessagingException ex) {
Logger.getLogger(SimpleController.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Khi tôi loại bỏ t.join() nó sẽ ném NullPointerException này.
Exception in thread "Thread-3" java.lang.NullPointerException
at com.sun.javafx.collections.ListListenerHelper$Generic.fireValueChangedEvent(ListListenerHelper.java:291)
at com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:48)
at com.sun.javafx.scene.control.ReadOnlyUnbackedObservableList.callObservers(ReadOnlyUnbackedObservableList.java:74)
at javafx.scene.control.TableView$TableViewArrayListSelectionModel$3.onChanged(TableView.java:1725)
at com.sun.javafx.collections.ListListenerHelper$SingleChange.fireValueChangedEvent(ListListenerHelper.java:134)
at com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:48)
at com.sun.javafx.collections.ObservableListWrapper.callObservers(ObservableListWrapper.java:97)
at com.sun.javafx.collections.ObservableListWrapper.clear(ObservableListWrapper.java:184)
at javafx.scene.control.TableView$TableViewArrayListSelectionModel.quietClearSelection(TableView.java:2154)
at javafx.scene.control.TableView$TableViewArrayListSelectionModel.updateSelection(TableView.java:1902)
at javafx.scene.control.TableView$TableViewArrayListSelectionModel.access$2600(TableView.java:1681)
at javafx.scene.control.TableView$TableViewArrayListSelectionModel$8.onChanged(TableView.java:1802)
at com.sun.javafx.scene.control.WeakListChangeListener.onChanged(WeakListChangeListener.java:71)
at com.sun.javafx.collections.ListListenerHelper$Generic.fireValueChangedEvent(ListListenerHelper.java:291)
at com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:48)
at com.sun.javafx.collections.ObservableListWrapper.callObservers(ObservableListWrapper.java:97)
at com.sun.javafx.collections.ObservableListWrapper.add(ObservableListWrapper.java:154)
at com.sun.javafx.collections.ObservableListWrapper.add(ObservableListWrapper.java:144)
at javasplitpane.SimpleController$MessageLoop.run(SimpleController.java:95)
at java.lang.Thread.run(Thread.java:722)
Điều này xuất hiện ở vị trí khác, trong mười bốn email, ba mươi email. Bạn có một số ý tưởng?
p.s Tôi không thể đợi quá trình tải xuống này vì mất 20 giây. với 50 email - tôi phải làm điều đó trong khi khởi tạo.
Đừng đặt tên biến của bạn với cùng trường hợp với Lớp của chúng. –
'Dữ liệu' không được khởi tạo, khởi tạo nó. –
Tôi đã khởi tạo nó (dữ liệu nằm trong tệp khác) :) – user2150038