2014-10-21 4 views
2

나는 자바를 배우고있다. 간단한 GUI를 사용하여 간단한 퀴즈 게임을위한 jar 파일을 컴파일하고 만들었습니다. 모든 여기 Java 지원되지 않는 주 보조 버전 52? Oracle Java 1.8의 새로운 기능을 사용하지는 않았지만 왜 이런 일이 발생합니까?

내 버전 정보입니다 ' javac -d ...'와 ' jar -xvmf...'로 14.04 터미널 수동으로 우분투에서 수행 : 나는 그것을 만들기위한 자바 SE 5.0을 다루는 튜토리얼을 따라, 그래서 새로운 추측하지
java version "1.8.0_11" 
Java(TM) SE Runtime Environment (build 1.8.0_11-b12) 
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode) 

javac 1.8.0_11 

'1.8'의 기능이 사용되었습니다. 그것은 컴파일되고 그것은 나를 위해 잘 작동합니다. Ubuntu 14.04에서 OpenJDK (최신 버전 사용 가능)를 사용하는 친구가 실행하려고했을 때 과 같이 많은 오류가 발생했습니다 ... 지원되지 않는 메이저 마이너 ... 52 ....

터미널에서 전체 자세한 출력이 없습니다. 이 문제를 피할 수있는 방법이 있습니까? 왜 최신 버전의 새로운 기능을 사용하지 않았지만 이런 일이 발생합니까?

나는 자바가 을 "한 번 쓰기 어디서나 실행"할 줄 알았는데, 및 관련 다만 약간 작은 이전 버전과 사물, 심지어 간단한 호환성 문제는 내가 일을 다시 생각한다!

+5

1.8을 사용하여 Java 클래스를 컴파일하면 1.8에서만 실행할 수 있습니다. 이전 버전에서 실행하려면'-target' 매개 변수를 지정해야합니다. 자세한 내용은 설명서를 참조하십시오. http://docs.oracle.com/javase/8/docs/technotes/tools/windows/javac.html#BHCJDCID –

답변

7

바이트 코드의 버전은 Java 8의 새로운 기능을 사용하는지 여부에 달려 있지 않습니다. 그것은 단순히 사용하는 컴파일러에 달려 있습니다. -target 옵션을 사용하여 이전 버전을 지정하지 않으면 Java 8 컴파일러는 기본적으로 Java 8 바이트 코드를 생성합니다.

사이드 노트 : 친구가 최신 버전의 OpenJDK (Java 8)를 사용하고 있지 않습니다. 그렇지 않으면이 예외가 발생하지 않습니다.

+0

대상을 얼마나 낮춰야합니까? 1.5? 모두 내가 그것을 ArrayLists, 프레임 등을 많이 사용 고려하십시오. –

+4

당신의 앱을 누가 사용할 것인지, 어떻게 배포 할 것인가/설치 할 것인가 등에 달려 있습니다. 나는 기본값을 고수하고, 앱에 Java 8이 필요하다는 사실을 문서화합니다. 위험을 감수하는 것이 훨씬 위험합니다. 대상에 존재하지 않는 방법을 사용하여 Java 8에서 더 이상 존재하지 않는 Java 이전 버전의 버그에 걸릴 위험이 없습니다. Java 5를 대상으로하려면 Java 5로 개발해야합니다. –

+1

참고로, 우분투는 아직 공식 저장소의 일부로 Java 8을 아직 가지고 있지 않습니다 (Launchpad 등). java 8을 사용하려면 직접 다운로드해야합니다. https://bugs.launchpad.net/ubuntu/+source/openjdk-8/+bug/1297065 – dkatzel