Scene Builder を使用して JavaFx 2 を独学しようとしています! 3 つのシーンと、シーンごとに個別のコントローラーを使用してアプリを作成しました。最初のシーンは、チーム メンバーがバッジ番号を入力するログイン画面です。ログイン ボタンが押されると (アクション イベントで)、Navision のテーブルに対して従業員を検証しています。
私がやろうとしているのは、ルックアップを開始する直前に進行状況インジケーターの可視値を true に設定することですが、スレッドが完了するまで表示されず、それまでに次のシーンにいるか、設定しています可視性を false に戻します。
タスクとスレッドに入れてみましたが、何も機能しません!!!
これがLoginControllerにある私のコードです。
java package com.dp.inventorycheck;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.ResourceBundle;
import java.util.regex.Pattern;`
import org.apache.log4j.Logger;
import com.dp.inventorycheck.modal.Employee;
import javafx.concurrent.Task;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.layout.AnchorPane;
public class LoginController extends AnchorPane implements Initializable {
@FXML
PasswordField badgeNumPF;
@FXML
Button loginBtn;
@FXML
Button keypadBtn;
@FXML
Label errorLbl;
@FXML
AnchorPane keyPad;
@FXML
ProgressIndicator progressIndicator;
@FXML
AnchorPane inputPane;
private MainApp application;
Employee employee = null;
Logger logger = Logger.getLogger(LoginController.class);
public void setApp(MainApp application) {
this.application = application;
}
@Override
public void initialize(URL location, ResourceBundle resources) {
}
public void processLogin(ActionEvent event) {
if (application == null) {
errorLbl.setText("Unknown Error!");
} else {
errorLbl.setText("");
// Check for valid badge (7 numeric characters)
if (Pattern.matches("[0-9]+", badgeNumPF.getText()) && badgeNumPF.getText().length() > 5 && badgeNumPF.getText().length() < 8) {
// Valid badge
// Check navision for valid employee and permisions
logger.info("Badge is numeric and < 8");
MyTask task = new MyTask();
updateIndicator();
Thread th = new Thread(task);
th.start();
logger.info("continuing On");
try {
th.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
if(employee != null){
application.setEmployee(employee);
application.gotoLocationSelection();
}else{
// Badge not valid
updateIndicator();
badgeNumPF.requestFocus();
errorLbl.setText("Invalid Badge Number!");
}
} else {
// Badge not valid
badgeNumPF.requestFocus();
errorLbl.setText("Invalid Badge Number!");
}
}
}
public class MyTask extends Task<Void>{
protected Void call() throws Exception {
try {
logger.info("Task Started");
employee = application.getValidator().validEmployee(badgeNumPF.getText());
logger.info("Lookup/Thread Done");
} catch (RemoteException e) {
updateIndicator();
badgeNumPF.requestFocus();
errorLbl.setText(e.getMessage());
}
return null;
}
}
private void updateIndicator() {
if (!progressIndicator.isVisible()) {
logger.info("Indicator On");
progressIndicator.setVisible(true);
} else {
logger.info("Indicator Off");
progressIndicator.setVisible(false);
}
}
}