이것은 간단한 질문과 마찬가지로 this one의 후속 질문입니다. OS X 및 Windows에서 .jar
파일을 두 번 클릭하여 Java 프로그램을 실행할 수 있었지만 리눅스에서는 후자와 마찬가지로 파일 경로 문제가 발생합니다).우분투에서 File.getAbsolutePath가 올바르지 않음
우분투 (12.04)에서 NetBeans를 사용하여 몇 가지 방법을 시도해 본 결과 프로그램이 작업 디렉토리로 간주하는 것으로 보이는 것으로 나타났습니다 (출력은 File.getAbsolutePath()
입니다). 내가 넷빈즈에 내 응용 프로그램을 시작하면, 모든 것이 (심지어 우분투에서) 작동하고,
System.out.println(new File(".").getAbsolutePath());
나에게 내 프로젝트 폴더 따라서 올바른 /home/my_home/projects/VocabTrainer/.
을 제공합니다. 그러나 /home/my_home/projects/VocabTrainer/dist
에있는 .jar
파일을 두 번 클릭하면 갑자기 우분투 아래에 출력됩니다. /home/my_home/.
내 dist
디렉토리의 하위 디렉토리에있는 데이터 파일에 액세스하려는 경우 문제가 있습니다.
누구든지이 동작의 원인을 알고 있으며 문제를 어떻게 해결할 수 있습니까?
PS : 여기이 필요하면 모르겠지만는 java -version
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.5) (6b24-1.11.5-0ubuntu1~12.04.1)
OpenJDK Server VM (build 20.0-b12, mixed mode)
답장을 보내 주셔서 감사합니다. 나는 아마도 뭔가 익숙하지 않은 짓을했다. (나는 자바가 처음이다.) URL "url = this.getClass(). getClassLoader(). getResource ("qualified/class/VocabItem.class ");" 나에게 URL == null을 주었다. 나는 단지 나의 수업 중 하나의 이름을 골랐다. 그러나 아마 나는 당신의 제안을 오해했다!? – canavanin
ah - "qualified/class"비트를 문제가되는 클래스의 패키지로 대체합니다 (있다고 가정). 클래스의 "규정 된 클래스 이름"은 패키지가 앞에 붙인 클래스 이름입니다. 이 목적을 위해, 당신은 "." "/"자를위한 문자. 따라서 VocabItem 클래스가 com.canavanin 패키지에 있으면 해당 문자열에 "com/canavanin/VocabItem.class"를 사용합니다. 패키지가 없으면 문자열의 해당 부분을 생략 할 수 있어야합니다. –
업데이트 해 주셔서 감사합니다. 이제 MalformedURLExeption을 얻습니다 : java.net.MalformedURLException : 프로토콜 없음 : /home/my_home/projects/VocabTrainer/build/classes/my/vocabtrainer/VocabItem.class – canavanin