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();
									}
							//----------------------------
			                    }
			                });
			            }
			        });

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐