javafx程序Application launch must not be called more than once报错的结局方法,解决javafx重复调用的问题。
本人遇到的问题,使用java swing调用 javafx文件选择器出现的的报错
Application launch must not be called more than once,经过通宵一晚上终于解决了这个问题。
javafx文件选择器代码
.
package com.water.util;
import javafx.application.Application;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import java.io.File;
import javax.swing.filechooser.FileSystemView;
public class FileWindows extends Application {
public static String res=null;
public void start(Stage stage) throws Exception{
FileChooser chooser=new FileChooser();
FileSystemView fsv = FileSystemView.getFileSystemView(); //注意了,这里重要的一句
chooser.setInitialDirectory(new File(String.valueOf(fsv.getHomeDirectory()))); //设置初始路径,默认为我的电脑
chooser.setTitle("打开SQL"); //设置窗口标题,默认为“打开”
chooser.getExtensionFilters().addAll(new FileChooser.ExtensionFilter("sql", "*.sql"));
try {
res = chooser.showOpenDialog(stage).getAbsolutePath(); //chooser.showOpenDialog(stage)得到File对象
Tools.execute(res);
Tools.messageWindows("导入成功");
}catch(Exception e) {
}
}
}`
//错误调用方法
public void starts() {
launch(null);
}
1.我先说一下我错误调用的方法,正常启用javafx窗口程序的时候,调用时候如下代码
public static void main(String arg[]){
launch(arg)
}
2.我先lunch(arg)封装到一共方法里面进行重复调用的时候,第一次调用javafx窗口的时候,在使用结束窗口关闭的时候,单javafx线程还在继续运行,导致当第二次调用同一次窗口的时候,无法打开窗口,并报错Application launch must not be called more than once,是因为上次的进程没有关闭,无法进行第二次的调用
3.解决方法 如果下。请将下面注释横线内部的内容换成要重复调用的javafx窗口程序
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new JFXPanel(); // this will prepare JavaFX toolkit and environment
Platform.runLater(new Runnable() {
@Override
public void run() {
//----------------------------
//调用的时候通过无参调用方法,来调用start(new Stage())来实现加载
//并重复打开内容
FileWindows f = null;
try {
f=new FileWindows();
f.start(new Stage());
}catch(Exception e) {
e.printStackTrace();
}
//----------------------------
}
});
}
});