0
我想按下按鈕時更新線程(ScheduledService)中文本的值。我可以在GUI中更新文本的值,但該值無法在線程(ScheduledService)中更新。如何更新線程中事件處理程序的值?
我該如何更新線程(ScheduledService)區域中的文本值?
[Procesure]
(1)當我輸入文本的值和按下按鈕時,該值顯示在GUI 通過下面的代碼(在事件處理程序)
label.setText(text);
Value = Integer.parseInt(text);
(2 )我想通過「值」的值由下面的
recieve(Value);
(3)中的「值」是由下面的代碼所示值線程
System.out.println(a);
但是,「值」的值不更新,它仍然是「0」。 「0」的值是「值」的初始值。
public Integer Value = 0;
我的代碼如下:
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);
}
}
非常感謝! – kkj