2013-07-11 3 views
5

.jar 파일이 있는데, 명령 프롬프트에서 java -jar MyJar.jar를 통해 실행하면 정상적으로 작동합니다. 그러나 그것을 두 번 클릭하지 마십시오. 두 번 클릭하면 프로그램이 올바르게 시작되지만 내부의 내용은 작동하지 않습니다.vs java -jar MyJar.jar을 더블 클릭하십시오.

혼자서 무엇이 잘못되었는지 알아 내려고하기 위해 : runnable .jar을 두 번 클릭하는 것과 커맨드 라인에서 실행하는 것의 차이점은 무엇입니까? 실행되는 프로그램이 중요하고 그 실행 방법에 따라 변경할 수 있습니다 어디

+0

더블 클릭이 javaw를을하지 자바를 시작, 참조 : http://stackoverflow.com/questions/1997718/difference-between-java-exe-and-javaw-exe – morpheus05

+0

"내부의 무언가가 효과가 없다"는 것은 무엇을 의미합니까? –

+1

둘 사이의 주요 차이점은 실행 위치의 컨텍스트입니다. 명령 행에서 실행할 때 실행 컨텍스트는 java 명령을 실행 한 디렉토리가됩니다. Jar 파일을 두 번 클릭하면 컨텍스트가 시스템에 따라 달라집니다. System.out.println (새 파일 ("."). getCanonicalPath()); – MadProgrammer

답변

2

로 실행됩니다.

당신은 예를 들어

import java.awt.EventQueue; 
import java.awt.HeadlessException; 
import java.io.File; 
import java.io.IOException; 
import javax.swing.JOptionPane; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class WhereAmI { 

    public static void main(String[] args) { 
     new WhereAmI(); 
    } 

    public WhereAmI() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException ex) { 
       } catch (InstantiationException ex) { 
       } catch (IllegalAccessException ex) { 
       } catch (UnsupportedLookAndFeelException ex) { 
       } 

       try { 
        String path = new File(".").getCanonicalPath(); 
        JOptionPane.showMessageDialog(null, "I was started in " + path); 
       } catch (IOException exp) { 
        exp.printStackTrace(); 
       } 

      } 
     }); 
    } 

} 

... 같은 것을 사용하여이를 테스트 할 수 있습니다. 컴파일 할 때 나는이 위치로 디렉토리를 변경하고 실행하면 항아리는 /Volumes/Disk02/DevWork/personal/java/projects/wip/StackOverflow/WhereAmI/dist

에있는 java -jar WhereAmI.jar

enter image description here

내가 /Volumes/Disk02/DevWork/personal/java/projects/wip/StackOverflow/WhereAmI 디렉토리를 변경하고 실행하면 출력 java -jar dist/WhereAmI.jar

enter image description here

출력

실행 컨텍스트가 변경되었습니다. Jar 파일을 두 번 클릭하면 시스템에 따라 동일한 문제가 발생합니다. 그것은 짧은 커팅이나 실제 Jar 일 수도 있습니다.

이렇게하면 상대 리소스를 사용하는 경우 Jar이 리소스와 관련하여 올바른 위치에서 실행되는지 확인해야합니다. 이를 달성하는 방법

은 OS에 따라 달라집니다

0

더블 클릭하면 "javaw를 -jar MyJar.jar"

+0

항상 그렇지는 않습니다. 예를 들어 MacOS에서는 javaw 명령이 없습니다. 그리고 이것이 이것이 애플리케이션의 실행 컨텍스트에 어떻게 영향을 미칠 수 있는지 언급하지 않았 더라면, 이것은 합리적인 코멘트가 될 것입니다. – MadProgrammer

+0

@MadProgrammer True. 그러나 나는 그것이 윈도우에 대해서만 언급하고 있다고 가정 할 때 질문의 쓴 부분을 짐작했다고 생각한다. –