我在主要班级:
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
,这是一个好方法吗?
答案 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();
}