2013-07-11 5 views
0

Я разрабатываю приложение javafx, которое имеет ListView, поддерживаемый ObservableList.Thread зависает при обновлении ObservableList

@FXML 
private ListView<String> taggedQueriesResultsList; 
private ObservableList<String> searchResultsList = FXCollections.observableArrayList(); 

ObservableList обновляется с данными, скажем list.add("something"), с помощью запланированного задания с использованием Executors.newSingleThreadScheduledExecutor(). Однако запланированное задание никогда не запускается после первого раза. Пользовательский интерфейс обновляется после первого запуска. Я заметил, что если я прокомментирую строку list.add("something"), задача будет выполняться периодически по расписанию.

Я думаю, что это проблема синхронизации, но не уверен. Пожалуйста, помогите мне понять, что происходит и как решить проблему.

ответ

1

Убедитесь, что вы всегда обновляете графический интерфейс из потока приложений. См http://docs.oracle.com/javafx/2/threads/jfxpub-threads.htm

Для потокобезопасной ObservableCollection смотрите здесь: Fast performing and thread safe observable collection

+1

второй ссылка на Fast исполнительских и Потокобезопасной наблюдаемую коллекции для C# , этот вопрос касается java. –

0

пример, в котором создается синхронизированный Observable список:

newSeries = new XYChart.Series<>(); 
ObservableList<XYChart.Data<Number, Number>> listaSerie; 
listaSerie = FXCollections.synchronizedObservableList(FXCollections.observableList(new ArrayList<XYChart.Data<Number, Number>>())); 
newSeries.setData(listaSerie); 
Смежные вопросы