문제

기계에 설치된 JRE 버전이 사용자가 실행하려는 응용 프로그램에 충분히 높는지 여부를 결정하는 가장 좋은 방법은 무엇입니까? Java 전용 물건을 사용하여 수행하는 방법이 있습니까? Windows/Linux/MacOSX에서 작동하는 솔루션을 원합니다. JRE 버전이 너무 낮 으면 메시지가 표시되어야합니다. 현재 Java 1.5에서 실행하려고하면 예외가 발생합니다 (앱은 Java 1.6 용으로 제작되었습니다). 보편적 인 솔루션이 없다면 Windows에서 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

더 높은 버전 JRE를 위해 구축 된 응용 프로그램은 낮은 버전 JRE에서 실행되지 않습니다. 따라서 JRE 버전을 확인하기 위해 응용 프로그램에 코드를 추가 할 수는 없습니다. JRE 버전이 호환되지 않으면 JRE 버전 검사 코드는 처음부터 실행되지 않습니다.

당신이해야 할 일은 버전을 확인한 다음 필요한 경우 앱을 시작하는 낮은 버전 JRE (1.3?) 용으로 구축 된 일종의 런처 애플리케이션이있는 것입니다. 이것은 나에게 일종의 kludgy라고 들린다.

설치 중에 버전을 확인하는 것은 어떻습니까? 환경 변수를 확인하거나 스크립팅을 할 수있는 방식으로 앱을 설치하고 있습니까?

다른 팁

반사와 두 개의 컴파일러를 사용하여이를 수행 할 수 있습니다. 가장 오래된 Java 버전으로 메인 클래스를 컴파일하십시오. 사용 버전을 확인합니다 System.getProperty("java.version"), 또는 무엇이든, 그리고 반사를 사용하여로드 진짜 메인 클래스 수표가 통과되면 항아리를 직접로드 할 수도 있습니다. JRE는 컴파일 타임에 외부 메인 클래스에서 언급하지 않은 클래스를로드해서는 안됩니다.

당신은 고려할 수 있습니다 Java Webstart. 이름이 애플릿과 같은 것을 의미하더라도 독립형 신청에 관한 것입니다. WebStart는 런처로 JNLP-File (간단한 XML 파일, 여기서 앱의 다운로드 위치, 필요한 Java-Version 및 기타 메타 데이터)을 확인하고 올바른 JRE로 앱을 시작합니다. 최신 버전을 사용할 수있는 경우 응용 프로그램도 업데이트됩니다. 단점은 JNLP 파일을 써야한다는 것입니다. 예는 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?>

<!--
###############################################################################
#
# @(#)draw.jnlp 1.6 02/09/11
#
# JNLP File for Draw Demo Application
#
###############################################################################
 -->


<jnlp spec="0.2 1.0"
      codebase="http://java.sun.com/javase/technologies/desktop/javawebstart/apps"
      href="draw.jnlp">
   <information> 
      <title>Draw 4 App</title> 
      <vendor>Sun Microsystems, Inc.</vendor>
      <homepage href="http://java.sun.com/javase/technologies/desktop/javawebstart/demos.html"/>
      <description>A minimalist drawing application along the lines of Illustrator</description>
      <description kind="short">Draw Demo Short Description</description>
      <icon href="images/draw.jpg"/>
      <offline-allowed/> 
   </information> 
   <resources>
      <j2se version="1.3+" href="http://java.sun.com/products/autodl/j2se"/>
      <j2se version="1.3+"/>
      <jar href="draw.jar" main="true" download="eager"/>
   </resources>
   <application-desc main-class="Draw"/>
</jnlp> 

두 번째 가능성은 런처 프로그램을 사용하는 것입니다. 예는 다음과 같습니다 아파치 커먼즈 런처. 당신은 또한 일부 런처 앱을 직접 쓸 수 있지만 일반적으로 노력의 가치가 없습니다.

또한 다양한 환경 설정을 설정하거나 애플리케이션을 호출하기 전에 사전 점검을 수행 할 수있는 커먼즈 런치 사용을 고려할 수도 있습니다.

http://commons.apache.org/launcher

일반적으로 C 또는 Unix 전용 쉘 래퍼로 C 또는 (일시적으로)에 접근했습니다. 이것이 실제로 당신에게 효과가 있을지 확신하지 못합니다.

우리는 또한 제품에 JRE를 포함시킴으로써 이에 접근합니다. 사례의 99.9%를 관리합니다 (다른 0.1%는 다른 JVM을 사용하도록 구성을 명시 적으로 변경하는 사용자입니다). 다시 말하지만, 이것이 합리적인 솔루션인지 확실하지 않습니다.

우리의 경우, 상당한 양의 기본 코드 (JNI 및 기타)가 있으므로 어쨌든 우리가 지원하는 각 플랫폼에 대한 설치 가능한 이미지를 조정하는 것이 필요합니다. 그러나 Pure-Java 솔루션을 다루는 경우 최소한의 문서를 문서화하고 사람들에게 물건을 실행 해야하는 경우 프로그램에 도달하도록 지시해야 할 수도 있습니다. 사람들이 내 Mac이 MSVC를 실행하지 않거나 Linux 상자가 World of Warcraft를 실행하는 데 문제가 있다고 불평하는 것은 사람들과 같습니다. 그것은 소프트웨어가 목표로하는 (가상) 기계가 아닙니다. 전환해야합니다. 적어도 Java 세계에서는 누군가의 OS 종교적 감정을 상하게하지 않고 이것을 업그레이드라고 부를 수 있습니다. (MAC 사용자에게 MSVC를 실행하기 위해 Windows XP로 "업그레이드"하도록 지시하십시오. 비트 다운이 발생합니다.)

Java 명령을 실행할 때 Java 버전이 필요할 수 있습니다. java -version:1.6* com.me.MyClass. 이것이 Java의 모든 릴리스에서 작동하는지 확실하지 않지만 어쨌든 1.6에서는 잘 작동합니다.

런처의 경우 - 거기에있는 버전을 확인하십시오.

앱 내부; 위의 사용과 같이 system.getProperties ();

Properties sProp = java.lang.System.getProperties();
String sVersion = sProp.getProperty("java.version");
sVersion = sVersion.substring(0, 3);
Float f = Float.valueOf(sVersion);
if (f.floatValue() < (float) 1.4) {
    System.out.println("Java version too low ....");
    System.exit(1);
}
...

Java 1.2를 위해 런칭 클래스를 편집하여 진짜 1.6 클래스에서 메인 (). 지원되지 않는 클래스 예외가 발생하면 잡아 당기고 좋은 오류 메시지를 표시합니다.

다음은 시스템에 JRE 버전을 설치하는 코드입니다.

var list = deployJava.getJREs();
var result = "";
result = list[0];
for (var i=1; i<list.length; i++)
{
    result += ", " + list[i];
} 
document.write("jre version : "+result);

System.getProperties ()는 JRE, JVM 및 사양의 다양한 버전 ID를 포함하여 JVM 속성 목록을 제공합니다. 이는 모든 버전의 Java에 대해 구현되므로 컴파일 된 버전 및 버전 실행 또는 구현에 관계없이 작동해야합니다.

버전을 테스트하기 위해 기본 클래스를 작성하는 경우 Main () 시작 클래스에서 먼저 호출 할 수 있습니다. 그래도 실제로 기본 기능이어야합니다. 그렇지 않으면이를 깨뜨릴 위험이 있습니다.

흠 .. 저를 지루한 사람이라고 부르십시오. 그러나 예를 들어 Launch4J 또는 다른 기본 발사기를 사용하는 데 문제가 있습니다.

기본 발사기를 사용하여 실제로 코드를 실행하기 전에 JVM 버전을 확인하십시오. Java Only Solutions (내 책에서)는 개발자를 다룰 때만 의미가 있습니다. 최종 사용자를 때리면 Java 나 기술적 세부 사항에 대해 전혀 신경 쓰지 않는다는 것을 알게 될 것입니다. GW-Basic으로 신청서를 작성한 경우 응용 프로그램이 작동하는 한 적절하지 않습니다.

Java 1.6이 설치되지 않으면 Lauchner4J는 사용자에게 JDK 1.6의 다운로드 페이지를 가리 킵니다. 그것은 아마도 Java에서 마법을하는 것보다 당신의 문제에 더 적합합니다.

나는 그것을 발견한다 Winrun4J 나에게 아주 잘 작동합니다 (그러나 다시 한 번 편향 될 수 있습니다 :-)). 이를 통해 허용되는 Java의 최소 및/또는 최대 버전을 지정할 수 있습니다. 적절한 JRE 버전을 찾을 수없는 경우 사용자에게 메시지 상자를 나타냅니다 (메시지가 사용자 정의 가능).

위의 모든 것들은 너무 복잡합니다. 바로 가기:

Properties props = System.getProperties()
props.list(System.out)

JVM, JRE, JDK 및 직원에 대한 모든 것을 볼 수 있습니다. 또는 다음을 사용하여 특정 값을 얻습니다.

//full list of possible props you can see if u run code above
String props = System.getProperty(prop)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top