Я работаю над своим первым приложением JavaFX с файлом FXML.Моя программа состоит из нескольких элементов:
- addDeviceButton (addMyoButton)
- несколько TextArea, которые будут печатать данные, собранные с устройства.
Краткое описаниеработает:
- При нажатии addDecideButton должен начаться сбор данных из DataController (DeviceListener),
- Собранные данные и системные сообщения должны быть напечатаны в TextAreas.
Iвозникают две проблемы:
- печать в TextArea не работает,
- приложение зависает (не отвечает после нажатия addMyoButton)
In 1)Я понятия не имею, что не так.С 2) Я думаю, что я не должен помещать работающий dataCollector в метод, отвечающий за событие кнопки.Тем не менее, я не уверен, как сделать это правильно.
У вас есть предложения, идеи, как мне написать эти фрагменты ??Проблема в FXML или методах?
Ответственный за эту часть файла FXML выглядит следующим образом:
<TextArea fx:id="communicateTextField"
prefHeight="300.0" prefWidth="300.0" >
<Button fx:id="addMyoButton"
onAction="#addMyo" >
Метод addMyo (), который запускается после нажатия кнопки.
public void addMyo(ActionEvent event) {
try {
Hub hub = new Hub("com.example.hello-myo");
communicateTextField.setText("Attempting to find a Myo...");
Myo myo = hub.waitForMyo(10000);
if (myo == null) {
throw new RuntimeException("Unable to find a Myo!");
communicateTextField.setText(""Unable to find a Myo!");
}
communicateTextField.setText("Connected to a Myo armband!");
DeviceListener dataCollector = new DataCollector();
hub.addListener(dataCollector);
while (true) {
hub.run(1000 / 20);
communicateTextField.setText(dataCollector);
}
} catch (Exception e) {
System.err.println("Error: ");
e.printStackTrace();
System.exit(1);
}
}
Method for printing communicates to TextArea
public void printCommunicate(String communicate) {
communicateTextField.setText(communicate);
}