/ / JAVAFX - Das Beschriftungsfeld wird im Aktionsereignishandler nicht aktualisiert

JAVAFX - Das Feld "Label" aktualisiert sich nicht beim Ereignishandler "action" - java, javafx, fxml

Ich bin ein Neuling bei JAVAFX. Ich habe ein Anmeldeformular in der JavaFx-Anwendung. In der fxml-Datei ist ein Beschriftungsfeld definiert, dessen Textwert nach der Authentifizierung mit verschiedenen Nachrichten festgelegt wird. Bitte siehe Code unten.

CODE

if(userid>0){
//the below setText call doesn"t work and update the UI
actiontarget.setText("Modems are initializing. It may take longer time... ");
bootstrap =new Bootstrap();
new Thread(){
public void run(){
bootstrap.run();
}
}.start();
while(!bootstrap.isSet()){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// the below call also doesn"t work
actiontarget.setText("Modems are getting initialized. Please wait for sometime..");
}
serialModemList=bootstrap.getSerialModemList();
getPanelList(serialModemList);

}else{
// this one method call works fine. not sure why?
actiontarget.setText("Invalid Terminal and Password ");
}

Der Anruf actiontarget.setText(..) funktioniert nicht, wenn der Benutzer gültig ist. Es funktioniert jedoch, wenn der Benutzer ungültige Anmeldeinformationen eingibt. Bitte lassen Sie mich wissen, was mit dem Code nicht stimmt.

FXML

<?xml version="1.0" encoding="utf-8"?>

<?import java.net.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.image.*?>

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity"
minHeight="-Infinity" minWidth="-Infinity" prefHeight="469.0"
prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1">
<center>

<GridPane fx:id="gridpane" xmlns:fx="http://javafx.com/fxml"
alignment="center" hgap="10" vgap="10">

<Text text="Welcome" GridPane.columnIndex="0" GridPane.rowIndex="0"
GridPane.columnSpan="2" />

<Label text="Terminal" GridPane.columnIndex="0"
GridPane.rowIndex="1">
<font>
<Font size="15.0" />
</font>
</Label>

<TextField fx:id="txtuser" GridPane.columnIndex="1"
GridPane.rowIndex="1" />

<Label text="Password" GridPane.columnIndex="0"
GridPane.rowIndex="2">
<font>
<Font size="15.0" />
</font>
</Label>
<PasswordField fx:id="txtaun" GridPane.columnIndex="1"
GridPane.rowIndex="2" />
<HBox spacing="10" alignment="bottom_right"
GridPane.columnIndex="1" GridPane.rowIndex="4">
<Button fx:id="loginbtn" onAction="#handleLoginAction" text="LOGIN" />
</HBox>
<Label fx:id="message" GridPane.columnIndex="1"
GridPane.rowIndex="6" />
<Label fx:id="actiontarget" GridPane.columnIndex="1"
GridPane.rowIndex="7" />
</GridPane>
</center>
<top>
<Label id="Header" minWidth="400.0" prefHeight="81.0" prefWidth="174.0"
text="Sim Manager" BorderPane.alignment="CENTER">
<font>
<Font size="50.0" />
</font>
</Label>
</top>
<bottom>
<Label prefHeight="69.0" prefWidth="126.0" text="Powered by CIAR"
textFill="#20209e" BorderPane.alignment="bottom_right" />
</bottom>
</BorderPane>

Bitte lassen Sie mich wissen, wenn Informationen benötigt werden.

Antworten:

0 für die Antwort № 1

Ich glaube, Ihr Problem liegt in der Verwendung Thread.sleep Sie halten den UI-Thread an, sodass die Anzeige nicht aktualisiert werden kann.

Versuchen Sie es mit Task (https://docs.oracle.com/javafx/2/threads/jfxpub-threads.htm) und setzen Sie den Text in das onSucceeded und onFailed.