java restartApplication 方法只重启一次?

标签 java dynamic-data application-restart

我试图使用在堆栈溢出中找到的 restartApplication 方法,但由于某种原因它只会重新启动我的应用程序一次。例如,在下面这个简单的 JOptionPane 程序中,如果用户输入字母“a”,它将重新启动程序。一旦程序重新启动,如果用户再次输入“a”,程序就会终止执行。如何让它不断地自行重启?

我添加了一些 println() 语句,看看是否可以获得更多信息,它只是确认了程序在我第二次输入字母“a”后立即结束。

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import javax.swing.JOptionPane;


public class JOptionTest{
public static void restartApplication()
{
  final String javaBin = System.getProperty("java.home") + File.separator + "bin" + File.separator + "java";
  final File currentJar = new File("C:\\Documents and Settings\\My Documents\\hello3.jar");//UpdateReportElements.class.getProtectionDomain().getCodeSource().getLocation().toURI());

  /* is it a jar file? */
  if(!currentJar.getName().endsWith(".jar"))
    return;

  /* Build command: java -jar application.jar */
  final ArrayList<String> command = new ArrayList<String>();
  command.add(javaBin);
  command.add("-jar");
  command.add(currentJar.getPath());

  final ProcessBuilder builder = new ProcessBuilder(command);
  try {
    builder.start();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
  System.exit(0);
}


public static void main(String[] args){
    String str = JOptionPane.showInputDialog(null, "Enter some text",1);
    System.out.println(str);
    //String a= "a";
    if (str.equals("a")){
        System.out.println(str+ "right about to restart");
        restartApplication();
    }
}
}

最佳答案

看到这一行了吗?

System.exit(0);

您正在调用 restartApplication 一次,当它结束时,您将退出 java 进程。

如果您想连续重新启动,请删除此行并可能永远迭代:

 public static void restartApplication()
 {
  while(true){

       final String javaBin = System.getProperty("java.home") + File.separator + "bin" + File.separator + "java";
       final File currentJar = new File("C:\\Documents and Settings\\XBBKKYL\\My      Documents\\hello3.jar");//UpdateReportElements.class.getProtectionDomain().getCodeSource().get           Location().toURI());

      /* is it a jar file? */
     if(!currentJar.getName().endsWith(".jar"))
       return;

   /* Build command: java -jar application.jar */
    final ArrayList<String> command = new ArrayList<String>();
    command.add(javaBin);
    command.add("-jar");
    command.add(currentJar.getPath());

    final ProcessBuilder builder = new ProcessBuilder(command);
    try {
        builder.start();
    } catch (IOException e) {
       e.printStackTrace();
    }
  }
}

我还没有测试过,这只是一个想法

关于java restartApplication 方法只重启一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11906769/

相关文章:

java服务器http服务器收到来自Chrome的空请求

C++多维动态数组

php - 如何在 PHP/PDO 中创建动态文本字段?

java - 重启java服务器的main函数

linux - 自动重启崩溃的 Linux 守护进程

java - Netbeans 8.0.2 模块尚未部署

java - 我如何在ACM库中编写java反向字符串程序

python - 如何在 Pycharm 中重新启动程序?

java - 如何找到文本字段弹出窗口的HTML元素id?

.net - 动态数据的内部信息