2009-05-04 8 views
2

자바 애플릿을 작성 중이며 웹 페이지에 포함시키는 가장 좋은 방법을 알고 싶습니다.JRE를 아직 설치하지 않은 경우 사용자에게 설치하라는 메시지는 어떻게 표시합니까?

JRE를 아직 설치하지 않은 경우 설치하라는 메시지가 표시됩니다. 이 기능은 Java가 실행되는 모든 OS에서 크로스 브라우저를 (이상적으로) 작동해야합니다. 또 다른 요구 사항은 애플릿이 페이지로드시로드되어서는 안되지만 사용자 조치 후에 애플릿이 모든 페이지로드시 JVM을로드하지 않아야한다는 것입니다. this is the official SUN way이 맞지만, document.write()을 사용하므로 렌더링이 끝나면 사용할 수 없습니다.

+0

되지 않습니다 : 여기 내 소스입니까? "이 페이지를 보는 데 필요한 플러그인이 누락되었습니다"와 같은 것입니까? –

답변

4

그냥 애플릿 태그를 사용하는 것이 좋습니다. Alex B가 언급했듯이 대부분의 브라우저는 JRE가 없으면 사용자에게 설치하라는 메시지를 표시합니다.

심지어 썬은 인트라넷에 있지 않는 한 using the applet tag except on Intranets을 권장합니다. 여기서 논리는 내부 서버에서 JRE 다운로드를 호스팅하고 embed & 개체 태그를 사용하여 해당 서버로 다운로드하도록 지시하는 것입니다.

객체 태그를 포함하는 데 사용되었지만 버전 번호로 인한 번거 로움이 있습니다. Java 1.5가 필요하다고 가정 해 보겠습니다. 따라서 객체에 & 태그를 포함 시키면 사용자가 1.5가 없으면 업그레이드해야합니다. 그러나 이것이 실제로 원하는 것이 아니며, 최신 JVM으로 업그레이드하기를 원합니다. 어쨌든 내가 마지막으로 연주했을 때 가장 똑똑한 행동은 아니 었습니다. 브라우저에 따라 사용자 정의 설정이 필요한 점점 지점 -

0

내가 jwls에 동의, 사용하여 삽입하고 개체가 바로 크로스 브라우저를 얻을 매우 어색 때문에 애플릿 태그를 사용하는 것이 좋습니다.

애플릿 태그를 사용하면 Microsoft VM 1.1의 사용자에게주의를 기울여야합니다. 2 월에 테스트했을 때 그들은 여전히 ​​5% of Java versions을 차지했습니다. 이러한 사용자가 이후 버전이 필요한 페이지를 방문하면 끔찍한 회색 영역이 표시됩니다.

(java.net에 대한 토론 후) 해결책은 Java 버전을 확인하고 대상 버전이 충족되지 않으면 실패 페이지로 리디렉션하는 작은 애플릿을 사용하는 것이 었습니다. 이 브라우저의 기능

JavaRedirectorApplet.java

import java.applet.Applet; 
import java.net.URL; 

/** 
* Applet built for bytecode 1.1 
* 
* If applet is less than a set level redirects to a given page, else does nothing 
*/ 
public class JavaRedirectorApplet extends Applet { 

    /** The required java version */ 
    private final static String PARAM_REQUIRED_JAVA_VERSION = "REQUIRED_JAVA_VERSION"; 

    /** The failure page */ 
    private final static String PARAM_FAILURE_PAGE = "FAILURE_PAGE"; 

    /** 
    * Initializes the applet 
    */ 
    public void init() { 

     // evaluate the required Java version 
     double requiredJavaVersion = -1; 
     String requiredJavaVersionString = getParameter(PARAM_REQUIRED_JAVA_VERSION); 
     if (requiredJavaVersionString != null) { 
      try { 
       requiredJavaVersion = Double.valueOf(requiredJavaVersionString).doubleValue(); 
      } catch (Exception e) { 
       // ignored, caught below 
      } 
     } 

     if (requiredJavaVersion < 0) { 
      System.err.println(PARAM_REQUIRED_JAVA_VERSION + " not set or set incorrectly (must be set to a number greater than 0)"); 
      return; 
     } 

     // get the failure page 
     URL failurePageURL = null; 
     String failurePageString = getParameter(PARAM_FAILURE_PAGE); 
     if (failurePageString != null) { 
      try { 
       failurePageURL = new URL(getCodeBase().getProtocol(), 
            getCodeBase().getHost(), 
            getCodeBase().getPort(), 
            failurePageString); 
      } catch (Exception e) { 
       // ignored, caught below 
      } 
     } 

     if (failurePageURL == null) { 
      System.err.println(PARAM_FAILURE_PAGE + " not set or set incorrectly (must be set to a valid path)"); 
      return; 
     } 

     // check to see whether valid 
     if (!isValidVersion(requiredJavaVersion)) { 

      // not valid redirect self 
      getAppletContext().showDocument(failurePageURL, "_self"); 
     } 

     // seems fine 
    } 

    /** 
    * Check the Java version against a required version 
    * 
    * @param versionRequired 
    * @return the verdict 
    */ 
    public static boolean isValidVersion(double versionRequired) { 
     try { 
      double javaVersion = Double.valueOf(System.getProperty("java.version").substring(0, 3)).doubleValue(); 

      if (javaVersion < versionRequired) { 
       return false; 
      } else { 
       return true; 
      } 
     } catch (NumberFormatException e) { 
      return false; 
     } 
    } 
} 

예 HTML

<!-- place before the actual applet --> 
<div style="display: none;"> 
    <applet code="JavaRedirectorApplet" width="0" height="0"> 
     <param name="REQUIRED_JAVA_VERSION" value="1.4"/> 
     <param name="FAILURE_PAGE" value="/failurePage.html" /> 
    </applet> 
</div>