2012-02-22 5 views
2

클릭하면 응용 프로그램을 다시 시작할 응용 프로그램에 단추를 추가 할 용의가 있습니다. 나는 Google을 검색했지만 this one을 제외하고는 아무 도움이되지 않는다. 그러나 여기에 나오는 절차는 자바의 WORA 개념을 위반하는 것입니다.스윙 응용 프로그램을 다시 시작하십시오.

다른 Java 중심적 방법으로이 기능을 사용할 수 있습니까? 다른 사본을 포크 한 다음 종료 할 수 있습니까?

미리 감사드립니다. 도와 주셔서 감사합니다. 난 당신이 또한 so

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

그리고에 보여 주었다 개념을 고려하여 다음과 같은 코드를 작성


@deporter 나는 솔루션을 시도했지만 그것은 :(

@mKorbel 작동하지 않습니다 :

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 메뉴를 누르면 종료되고 몇 초 후에 cmd를 사용하여 새로운 UI가 열립니다. 그러나 JYM 메뉴 항목을 누르면 응용 프로그램이 완전히 종료됩니다. 다시 말하면 다시 시작되지 않습니다.

정말 고맙습니다.


해결되었습니다.

+0

그냥 호기심, 자바의 WORA 개념은 무엇입니까? –

+0

도움이 될 수 있습니다. http://stackoverflow.com/questions/4159802/how-can-i-restart-a-java-application – MByD

+0

@HarryJoy - http://en.wikipedia.org/wiki/Write_once,_run_anywhere – MByD

답변

3

의 것이 기본 발사기를 가지고 DB를 시각화 한 번 봐 솔루션 :

를 호출 된 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); 

감사합니다.

0

답변에 제공된 링크는 스윙 앱을 다시 시작하는 가장 좋은 방법입니다. 나에게 너에게 물어 보자. "WORA"나쁜 일을 끝내지 않았습니까? 대부분의 응용 프로그램은 플랫폼 중심 실행기와 함께 제공됩니다. 그것은 귀하의 응용 프로그램을 기본 응용 프로그램처럼 보이게합니다. 전체 앱을 더블 클릭 가능한 jar 파일로 배포 할 계획입니까? jar 파일을 더블 클릭하는 것은 그리 직관적이지 않습니다. 경우에 따라 로컬 컴퓨터가 winip 또는 winrar를 설치하면 jar 파일을 두 번 클릭하면 기본적으로 응용 프로그램이 시작되지 않습니다.

그런 문제를 해결하려면 기본 실행 프로그램이 가장 좋습니다. 이 자바 스윙 프로그램

관련 문제