Я создаю приложение на JavaFX, которое состоит из нескольких windows. Все в порядке, когда я хочу изменить главное окно с событием щелчка.
Но теперь я хочу изменить окно, когда я получаю специальную инструкцию по последовательному порту.
Я использовал jSerialComm и я могу прочитать все инструкции с помощью addDataListener, но когда я вызываю функцию для изменения главного окна, ничего не происходит.
Вот мой слушатель:
public class MainOverviewController {
@FXML
private Text zonenom;
[...]
// Reference to the main application.
private MainApp mainApp;
/**
* Is called by the main application to give a reference back to itself.
*
* @param mainApp
*/
public void setMainApp(MainApp mainApp) {
this.mainApp = mainApp;
mainApp.getPortCom().addDataListener(new SerialPortDataListener() {
@Override
public int getListeningEvents() {
return SerialPort.LISTENING_EVENT_DATA_RECEIVED; }
@Override
public void serialEvent(SerialPortEvent event)
{
String trame = "";
char tmp;
byte[] newData = event.getReceivedData();
System.out.println("Received data of size: " + newData.length);
for (int i = 0; i < newData.length; ++i){
tmp = (char)newData[i];
trame = trame + Character.toString(tmp);
}
trame = trame.trim();
String type = trame.substring(0,3);
System.out.println("type=*" + type + "*");
if(type.equals("_BA")){
showMainOverview(2);
}else{
System.out.println(type);
}
}
});
}
Функция, которую я вызываю в моем слушателе is:
public class MainApp extends Application {
private Stage primaryStage;
private BorderPane rootLayout;
private SerialPort comPort;
/**
* Constructor
*/
public MainApp() {
SerialPort[] ports = SerialPort.getCommPorts();
for (int i = 0; i < ports.length; i++) {
System.out.println("PORT " + i + " : " + ports[i].getSystemPortName());
}
comPort = SerialPort.getCommPorts()[2];
comPort.openPort();
comPort.setBaudRate(115200);
}
public SerialPort getPortCom(){
return comPort;
}
[...]
public void showMainOverview(Integer choixscene) {
try{
if(choixscene == 1){
// Load main overview.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainApp.class.getResource("view/MainOverview.fxml"));
AnchorPane mainOverview = (AnchorPane) loader.load();
// Set main overview into the center of root layout.
rootLayout.setCenter(mainOverview);
// Give the controller access to the main app.
MainOverviewController controller = loader.getController();
controller.setMainApp(this);
}else if(choixscene == 2){
// Load main overview.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainApp.class.getResource("view/MaintenanceOverview.fxml"));
AnchorPane mainOverview = (AnchorPane) loader.load();
// Set main overview into the center of root layout.
rootLayout.setCenter(mainOverview);
// Give the controller access to the main app.
MaintenanceOverviewController controller = loader.getController();
controller.setMainApp(this);
}
} catch (IOException e) {
e.printStackTrace();
}
}
Он блокируется в этой строке: rootLayout.setCenter (mainOverview);
У меня нет ошибок, просто ничего не происходит после этой строки.
Если кто-то может объяснить мне, в чем проблема ...
Большое спасибо