2023-02-17 399
我有控制器,在那里我尝试从电子邮件服务器获取收件箱文件夹.下载一切都可以.我可以将此数据(电子邮件主题,从日期)放入tableview中,但是…只有当我等待主题负责在TableView中设置此数据时.
代码:
// 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);
}
}
}
当我删除t.join()时,它将抛出此NullPoInterException.
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)
这在14封电子邮件中出现在不同的位置.你有一些想法吗?
P.S我等不及要下载了,因为它需要20秒.有50封电子邮件 – 我必须在初始化期间这样做.
您的错误
不要修改从Javafx应用程序线程以外的任何其他线程连接到活动场景图的任何内容.
背景信息
请参阅 javafx conterency Tutorial tutorial tutorial href =” https://stackoverflow.com/questions/15160410/usage-ogage-oge-of-javafx-platform-runlater-runlater-runlater-and-access-to-ui-from-a-different-thread/15160824#15160824″ .
您的数据列表是 observableRist 备份 tableview> tableview 在活动场景中显示图形,当您修改ObservAllist时,它将更改事件触发到表视图从用户线程而不是Javafx应用程序线程进行修改 – 这会导致竞赛条件和不一致的程序失败.
如何修复
要解决您的问题,请包装呼叫以更新 platform.runlater :
Platform.runLater(new Runnable() {
@Override public void run() {
data.add(item);
}
});
在Javafx应用程序线程上执行了提交给Platform.runLater的run方法的内容.
以上所述是小编给大家介绍的JavaFX初始化方法中的NullPointerException,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/34154.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态