スタック オーバーフローで見つかった 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();
}
}
}