ฉันมี ข้อผิดพลาด :
Exception in thread "JavaFX Application Thread" java.lang.IndexOutOfBoundsException: Index: 0
ฉันคิดว่าเป็นเพราะฉันต้องใช้ Platform.runLater()
แต่ดูเหมือนว่าข้อผิดพลาดไม่ได้มาจากสิ่งนี้
นี่คือฟังก์ชั่นที่ฉันพยายามแก้ไขด้วย Platform.runLater()
:
public void setListAirportForFilter(ListAirport listAirport){
this.myListAirport = listAirport;
departureCheckListView.setItems(myListAirport.getObservableDepartureAirtport());
arrivalCheckListView.setItems(myListAirport.getObservableArrivalAirport());
departureCheckListView.getCheckModel().getCheckedItems().addListener(new ListChangeListener<String>() {
@Override
public void onChanged(ListChangeListener.Change<? extends String> c) {
c.next();
if(c.wasAdded()) {
observableForbiddenDeparture.add(c.getAddedSubList().get(0));
System.out.println("Item Checked : " + c.getAddedSubList().get(0));
}
else if (c.wasRemoved()) {
observableForbiddenDeparture.remove(c.getAddedSubList().get(0));
System.out.println("Item Unchecked : " + c.getRemoved().get(0));
}
}
});
}
ข้อผิดพลาดเกิดขึ้นในกรณีที่สอง โดยถูกลบออก
myListAirport.getObservableArrivalAirport
หรือรายการอื่น ๆ คุณไม่ควรคิดว่าคุณเป็นผู้ฟังเหตุการณ์เพียงคนเดียว หากคุณเปลี่ยนCheckedItems
สิ่งต่างๆ มากมายจะทริกเกอร์ ไม่เพียงแต่ผู้ฟังของคุณเท่านั้น แต่มุมมองจะพยายามตรวจสอบและวาดตัวเองใหม่ ดังนั้นคุณต้องใช้ Platform.runLater เมื่อคุณเปลี่ยนค่าที่สังเกตได้จริงในเธรดอื่น - person varren   schedule 19.06.2015IllegalStateException : Invalid Change state: next() must be called before inspecting the Change.
โยนมาจากไหน? - person ItachiUchiha   schedule 19.06.2015Platform.runLater()
เนื่องจากคุณสมบัติ JavaFX และตัวฟังการเปลี่ยนแปลงสามารถเรียกใช้งานได้บนเธรดที่ไม่ใช่ JavaFX ดังที่ @varren กล่าวเนื่องจากการกระทำของผู้ใช้ถูกทริกเกอร์ในCheckListView
ซึ่งหมายความว่าคุณอยู่ที่JavaFX application thread
แล้วและคุณไม่ต้องการมัน ยิ่งไปกว่านั้น ข้อยกเว้นเริ่มแรกของคุณคือIndexOutOfBoundsException
ซึ่งหมายความว่าคุณกำลังพยายามเข้าถึงค่าดัชนีในอาร์เรย์ที่ไม่มีอยู่ - person ItachiUchiha   schedule 19.06.2015