在JAVA中,将值从其他类传递给Main类的有效方法是什么?

时间:2016-01-28 14:12:25

标签: java

我在主要班级:

 public void start(Stage primaryStage) throws Exception {

    Thread timeCheckThread = new Thread() {
        @Override
        public void run() {
            try{
                while (!done) {
                    System.out.println("Running!!");
                    System.out.println();
                    currentDate = LocalDate.now();
                    if (!oldDate.equals(currentDate)) {
                        index++;
                        saveData();
                        System.out.println("Saved!");
                    }
                    currentThread().sleep(5000);
                }
            }catch(InterruptedException e){
                e.printStackTrace();
            }
        }
    };

    timeCheckThread.start();      

    stage = primaryStage;
    stage.initStyle(StageStyle.TRANSPARENT);

    FXMLLoader loader = new FXMLLoader(getClass().getResource("sample.fxml"));
    Parent root = (Parent) loader.load();

    StackPane stackPane = new StackPane(root);
    stackPane.setStyle("-fx-background-color: rgba(0,0,0,0);");

    Scene scene = new Scene(stackPane, 312, 212);
    scene.setFill(Color.TRANSPARENT);
    stage.setScene(scene);

    Controller controller = loader.<Controller>getController();
    controller.registerStage(stage);
    stage.show();
}

//launch 'start'
public static void main(String[] args) {
    launch(args);
}

并在Controller类中:

public void exitButtonClicked() {
    Platform.exit();
}

我想将方法​​exitButtonClicked中的布尔值传递给主类,以便我可以结束while(!done)的循环。实现这一目标的有效方法是什么?是,在main方法中为setter done,并在setter类中从Main类的实例调用Controller,这是一个好方法吗?

2 个答案:

答案 0 :(得分:2)

使用布尔值创建最终类或接口。在任何需要的地方设置/获取此布尔值。

public final class foo {
     public static boolean flag = false;
}

在您的控制器类中:

foo.flag = true;

在您的主要班级中:

while(!foo.flag) {
     /* Do Something */
}

答案 1 :(得分:1)

有两个问题。您的控制器需要访问变量,并且您有5s睡眠。一种方法是在不传递主类实例的情况下创建一个静态实用方法。

class Main extends Application{
    static volatile boolean done = false;
    static Thread timeCheckThread;
    static void applicationIsExiting(){
        done = true;
        timeCheckThread.interrupt();
    }
}

然后,当您创建时间检查线程时,将其分配给静态变量:

 timeCheckThread = new Thread() { ...

控制器中的方法可以调用实用程序方法。

public void exitButtonClicked() {
    Platform.exit();
    Main.applicationIsExiting();
}