TextArea не обновляет данные с другого устройства - PullRequest
0 голосов
/ 02 марта 2019

Я работаю над своим первым приложением JavaFX с файлом FXML.Моя программа состоит из нескольких элементов:

  • addDeviceButton (addMyoButton)
  • несколько TextArea, которые будут печатать данные, собранные с устройства.

Краткое описаниеработает:

  1. При нажатии addDecideButton должен начаться сбор данных из DataController (DeviceListener),
  2. Собранные данные и системные сообщения должны быть напечатаны в TextAreas.

Iвозникают две проблемы:

  1. печать в TextArea не работает,
  2. приложение зависает (не отвечает после нажатия 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);
}
...