java swing重复调用javafx窗口出现Application launch must not be called more than once解决方法

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不一样的老墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值