Ich möchte den Wert von Text im Thread (ScheduledService) aktualisieren, wenn ich die Taste drücke. Ich kann den Wert von Text in GUI aktualisieren, aber der Wert ist nicht in der Lage, es in Thread (ScheduledService) zu aktualisieren.Wie aktualisiert man den Wert des Event-Handlers im Thread?
Wie soll ich den Wert von Text im Thread (ScheduledService) -Bereich aktualisieren?
[procesure]
(1), wenn I-Eingang der Wert von Text und den Knopf drückt, wird der Wert in GUI durch den folgenden Code (in Eventhandler)
label.setText(text);
Value = Integer.parseInt(text);
(2 gezeigten) ich möchte, den Wert „Value“ passiere durch den folgenden
recieve(Value);
(3) den Wert von „Wert“ durch den folgenden Code
gezeigt einzuzufädelnAber der Wert von "Value" ist nicht update.it ist immer noch "0". Der Wert von "0" ist der Anfangswert von "Value".
public Integer Value = 0;
Mein Code ist der folgende:
package javafxapplication16;
import java.io.IOException;
import javafx.application.Application;
import javafx.concurrent.ScheduledService;
import javafx.concurrent.Task;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonBuilder;
import javafx.scene.control.Label;
import javafx.scene.control.LabelBuilder;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFieldBuilder;
import javafx.scene.layout.HBox;
import javafx.scene.layout.HBoxBuilder;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.stage.Stage;
import javafx.stage.StageBuilder;
public class JavaFXApplication16 extends Application {
public Label label;
public Integer Value = 0;
public Button bt_co;
public TextField tx;
@Override
public void start(Stage stage) throws Exception{
tx = TextFieldBuilder.create().text("").build();
Font font = Font.font("Arial",FontPosture.ITALIC,20);
label = LabelBuilder.create().text("value")
.alignment(Pos.CENTER)
.font(font)
.prefWidth(200).build();
bt_co = ButtonBuilder.create().text("")
.prefWidth(200)
.alignment(Pos.CENTER)
.id("")
.build();
HBox root = HBoxBuilder.create().spacing(100).children(tx,label,bt_co).build();
Scene scene = new Scene(root);
scene.addEventHandler(ActionEvent.ACTION,actionHandler);
recieve(Value); // pass the value of "Value" to thread
stage = StageBuilder.create().width(640).height(640).scene(scene).title(" ").build();
stage.show();
}
/* thread */
private void recieve(int a) throws IOException {
ScheduledService<Boolean> ss = new ScheduledService<Boolean>()
{
@Override
protected Task<Boolean> createTask()
{
Task<Boolean> task = new Task<Boolean>()
{
@Override
protected Boolean call() throws Exception
{
System.out.println(a);
return true;
};
};
return task;
}
};
ss.start();
}
/* Event Handler */
EventHandler<ActionEvent> actionHandler = new EventHandler<ActionEvent>(){
public void handle (ActionEvent e){
Button src =(Button)e.getTarget();
String text = tx.getText();
label.setText(text);
Value = Integer.parseInt(text);
}
};
public static void main(String[] args) {
launch(args);
}
}
Vielen Dank! – kkj