【发布时间】:2016-08-18 02:56:15
【问题描述】:
差不多,我正在尝试编写一个简单的程序,让用户选择一个文件。不幸的是,通过 Swing 的 JFileChooser 有点过时了,所以我试图为此使用 JavaFX FileChooser。目标是将 FileGetter 作为线程运行,将文件数据传输到 Main Class,然后从那里继续。
主类:
package application;
import java.io.File;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
public class Main {
public static void main(String[] args) {
Thread t1 = new Thread(new FileGetter());
FileGetter fg = new FileGetter();
t1.start();
boolean isReady = false;
while(isReady == false){
isReady = FileGetter.getIsReady();
}
File file = FileGetter.getFile();
System.out.println(file.getAbsolutePath());
...
}
}
FileGetter 类:
package application;
import java.io.File;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
public class FileGetter extends Application implements Runnable {
static File file;
static boolean isReady = false;
@Override
public void start(Stage primaryStage) {
try {
FileChooser fc = new FileChooser();
while(file == null){
file = fc.showOpenDialog(primaryStage);
}
isReady = true;
Platform.exit();
} catch(Exception e) {
e.printStackTrace();
}
}
@Override
public void run() {
launch();
}
public static boolean getIsReady(){
return isReady;
}
public static File getFile(){
return file;
}
}
问题是当用户选择一个文件时,while 循环中 isReady 的值不会更新为 true(我有它的原因是为了防止 Main 中的代码继续将 File 设置为 null)。
非常感谢任何帮助、替代建议或解释为什么会发生这种情况!
【问题讨论】:
-
在 FileGetter 中创建您的
isReadyvolatile。 -
@Codebender 成功了!谢谢!只是好奇作为旁注,由于某种原因,当我包含 System.out.println(isReady); 时它起作用了。在while循环中。有人知道这是什么原因吗?
-
FileGetter#start 中的 while 循环是为了确保用户确实选择了一个文件,而 Main 类中的 while 循环是为了确保在选择文件之前代码不会继续。但是是的,我可以在两者中使用相同的条件语句,但是我相信这是同一个概念。
-
感谢大家的帮助!
-
哦,好的。我明白你在说什么!谢谢大家的帮助!
标签: java javafx jfilechooser filechooser