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();
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();
Platform.runLater(new Runnable() {
@Override
public void run() {
FileWindows f = null;
try {
f=new FileWindows();
f.start(new Stage());
}catch(Exception e) {
e.printStackTrace();
}
}
});
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)