У меня есть небольшое приложение javafx, использующее конструктор сцен, которое при нажатии кнопки должно считывать строку из COM-порта через равные промежутки времени и обновлять в текстовом поле.
Но теперь оно показывает только последнюю строку, если яиспользуйте цикл for, и ничего, если я помещу код в бесконечный цикл (это мое временное требование).
Может кто-нибудь мне помочь, чтобы при каждом чтении из COM-порта новая строка обновлялась в текстовом поле.
Вот код, который я использовал для обоих случаев:
Примечание: в обоих случаях в классе контроллера яполучить идеальный вывод на консоли.
public class Main extends Application
{
@Override
public void start(Stage primaryStage)
{
try
{
Parent root = FXMLLoader.load(getClass().getResource("test.fxml"));
Scene scene = new Scene(root);
//scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setTitle("test");
primaryStage.setScene(scene);
primaryStage.show();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
launch(args);
}
}
Вот класс Controller:
// In this case it shows only the last string in the text field.
public class Controller implements Initializable
{
@FXML
private Button sayHelloButton;
@FXML
private TextField helloField;
@Override
public void initialize(URL arg0, ResourceBundle arg1)
{
}
@FXML
public void printHello(ActionEvent event)
{
if(event.getSource() == sayHelloButton)
{
SerialPort serialPort = new SerialPort("COM22");
for(int i=0;i<5;i++)
{
try
{
if(!serialPort.isOpened())
{
serialPort.openPort();
serialPort.setParams(9600, 8, 1, 0);
}
String str = serialPort.readString(10,3000);
System.out.println(str);
helloField.clear();
helloField.setText(str);
}
catch(Exception e)
{
helloField.setText(e.toString());
}
}
}
}
}
Вот метод с бесконечным циклом:
//this shows nothing in the text field
@FXML
public void printHello(ActionEvent event)
{
if(event.getSource() == sayHelloButton)
{
SerialPort serialPort = new SerialPort("COM22");
while(true)
{
try
{
if(!serialPort.isOpened())
{
serialPort.openPort();
serialPort.setParams(9600, 8, 1, 0);
}
String str = serialPort.readString(10,3000);
System.out.println(str);
helloField.clear();
helloField.setText(str);
}
catch(Exception e)
{
helloField.setText(e.toString());
}
}
}
}