0

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);
        }
    }
}
4

0 に答える 0