当前位置: 首页 > 面试题库 >

重新启动Swing应用程序

何乐
2023-03-14
问题内容

我愿意在应用程序中添加一个按钮,单击该按钮将重新启动该应用程序。我搜索谷歌,但没有发现任何有用的,除了这一个。但是,此处遵循的过程违反了Java的WORA概念。

是否有其他以Java为中心的方法来实现此功能?是否可以只派生另一个副本然后退出?

提前致谢。我感谢您的帮助。

@deporter我已经尝试过您的解决方案,但是它不起作用:(

@mKorbel我写的,采取的概念下面的代码,你曾在所示这样

    JMenuItem jMenuItem = new JMenuItem("JYM");
    jMenuItem.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {

            ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(10);
            executor.setContinueExistingPeriodicTasksAfterShutdownPolicy(true);
            executor.setExecuteExistingDelayedTasksAfterShutdownPolicy(true);
            ScheduledFuture<?> future = executor.schedule(new Runnable() {

                @Override
                public void run() {
                    try {
                        Process p = Runtime.getRuntime().exec("cmd /c start java -jar D:\\MovieLibrary.jar");
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                }
            }, 2, TimeUnit.SECONDS);                
            executor.shutdown();
            try {
                executor.awaitTermination(10, TimeUnit.SECONDS);
            } catch (InterruptedException e1) {
                e1.printStackTrace();
            }

            System.exit(0);
        }
    });

并且:

ScheduledExecutorService schedulerExecutor = Executors.newScheduledThreadPool(2);
            Callable<Process> callable = new Callable<Process>() {

                @Override
                public Process call() throws Exception {
                    Process p = Runtime.getRuntime().exec("cmd /c start java -jar D:\\MovieLibrary.jar");
                    return p;
                }
            };
            FutureTask<Process> futureTask = new FutureTask<Process>(callable);
            schedulerExecutor.submit(futureTask);
            schedulerExecutor.shutdown();
            try {
                schedulerExecutor.awaitTermination(10, TimeUnit.SECONDS);
            } catch (InterruptedException e1) {
                e1.printStackTrace();
            }

            System.exit(0);

它的工作,但只有一次。如果我是第一次启动该应用程序并按JYM menuitem,则它将关闭,几秒钟后它将使用cmd打开一个新的ui,但是如果我按那个JYM
menuitem,该应用程序将完全终止,即不再再次启动。

非常感谢您的帮助。

解决了。


问题答案:

解决方案:

从ActionListener调用以下代码。

ScheduledExecutorService schedulerExecutor = Executors.newScheduledThreadPool(2);
Callable<Process> callable = new Callable<Process>() {

    @Override
    public Process call() throws Exception {
        Process p = Runtime.getRuntime().exec("cmd /c start /b java -jar D:\\MovieLibrary.jar");
        return p;
    }
};
FutureTask<Process> futureTask = new FutureTask<Process>(callable);
schedulerExecutor.submit(futureTask);

System.exit(0);

谢谢。



 类似资料:
  • 问题内容: 如何重新启动Java AWT应用程序?我有一个附加了事件处理程序的按钮。我应该使用什么代码来重新启动应用程序? 我想做与应用程序中相同的事情。 问题答案: 当然,可以重新启动Java应用程序。 以下方法显示了一种重新启动Java应用程序的方法: 基本上,它执行以下操作: 查找Java可执行文件(我在这里使用了Java二进制文件,但这取决于您的要求) 查找应用程序(在我的情况下是一个ja

  • 下面是在没有fxml的情况下重新启动JavaFX应用程序的代码。 但是,我想用fxml实现这一点。 我不知道如何使用fxml应用此代码。 我的代码。 Main.java 控制器。JAVA 样品fxml 我想重新启动我的JavaFX应用程序。 我不知道如何使用fxml应用此代码。 如何使用fxml重新启动JavaFX应用程序?

  • 希望有人能帮我找出,如果不是一个解决方案,至少是一个行为的解释。 问题: 在一些设备上,按下启动器图标会导致当前任务恢复,在其他设备上,会导致初始启动意图被激发(有效地重新启动应用程序)。为什么会这样? 细节: 当您按下“启动程序图标”时,应用程序会正常启动-也就是说,我假设,使用您的第一个和操作和类别。然而,情况并非总是如此: 在大多数设备上,如果您在应用程序已经运行后按下启动器图标,则会恢复该

  • 我正在尝试发布我的第一个Android应用程序,以发送给一些测试人员。但是,我遇到了一个问题。当您退出应用程序,然后通过其图标启动它重新进入它时,它会重新启动整个应用程序,而不是返回到其以前的位置。即使您在退出后立即重新进入,也会发生这种情况。但是,如果我按住主屏幕按钮并通过最近的应用程序列表启动它,则不会发生这种情况。 我在网上搜索过其他有这个问题的人,只有少数人,但没有人能确切回答为什么会发生

  • 我们的web应用程序进程正在定期重新启动,我们无法确定原因。 当查看应用程序事件(使用Azure门户中的“诊断和解决问题”刀片服务器)时,“IIS AspNetCore模块”会出现以下大量日志 事件ID 1005: 事件ID 1001: 一般资源使用情况没有可疑之处,应用程序日志中也没有任何可疑之处。 解决这些进程重新启动原因的最佳方法是什么? 在web应用程序的诊断日志中处理web日志后,我现在

  • 我是C编程的初学者,如果我能得到一些关于如何重新启动程序的提示,我将不胜感激?我目前正在开发一个猜测游戏,用户有10次尝试猜测随机提供的秘密号码。我希望该程序能够从一开始就为用户提供新一轮游戏(尝试次数1猜测次数:),这意味着重新运行该程序。 以下是节目: