0

スタック オーバーフローで見つかった restartApplication メソッドを使用しようとしましたが、何らかの理由でアプリケーションが 1 回しか再起動されません。たとえば、以下の単純な JOptionPane プログラムでは、ユーザーが文字「a」を入力すると、プログラムが再起動します。プログラムが再起動すると、ユーザーがもう一度「a」を入力すると、実行が終了します。継続的に再起動できるようにするにはどうすればよいですか?

いくつかの println() ステートメントを追加して、さらに情報を取得できるかどうかを確認しました.2回目に文字「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();
    }
}
}
4

1 に答える 1

3

この行が見えますか?

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

私はこれをテストしていません、それは単なるアイデアです

于 2012-08-10T17:57:16.120 に答える