2017-01-26 8 views
0

내 애플릿은 "Run As -> Java Applet"으로 실행할 때 Eclipse에서 작동하지만 JNLP 파일로 실행하려고하면 NoClassDefFoundError이 표시됩니다. 내 응용 프로그램 내에 tyrus 구현을 사용하는 javax.websocket-api를 사용하려고합니다.NoClassDefFoundError with Java Web Start 및 Websocket

자바 코드 :

import javax.websocket.DeploymentException; 
import org.glassfish.tyrus.server.Server; 

public class MyApplet extends Applet { 
    Server server = new Server("localhost", 8025, "/root/", MyApplet.class); 
    try { 
     server.start(); 
    } 
    catch (DeploymentException e) { 
     e.printStackTrace(); 
    } 
} 

오류 메시지 :

java.lang.RuntimeException: java.lang.NoClassDefFoundError: javax/websocket/DeploymentException 
    at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.instantiateApplet(Unknown Source) 
    at sun.plugin2.applet.Plugin2Manager.initAppletAdapter(Unknown Source) 
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.NoClassDefFoundError: javax/websocket/DeploymentException 
    at java.lang.Class.getDeclaredConstructors0(Native Method) 
    at java.lang.Class.privateGetDeclaredConstructors(Unknown Source) 
    at java.lang.Class.getConstructor0(Unknown Source) 
    at java.lang.Class.newInstance(Unknown Source) 
    at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter$1.run(Unknown Source) 
    at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$500(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: javax.websocket.DeploymentException 
    at sun.plugin2.applet.Plugin2ClassLoader$2.run(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader$2.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.plugin2.applet.Plugin2ClassLoader.findClassHelper(Unknown Source) 
    at sun.plugin2.applet.JNLP2ClassLoader.findClass(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 24 more 

JNLP 파일 :

<%@ page contentType="application/x-java-jnlp-file"%> 
<?xml version="1.0" encoding="UTF-8"?> 
<jnlp spec="1.5" codebase="http://localhost:7001/root"> 
    <information> 
     <title>title</title> 
     <vendor>vendor</vendor> 
    </information> 
    <security> 
     <all-permissions/> 
    </security> 
    <resources> 
     <java version="1.7*"/> 
     <jar href="my_applet.jar" main="true"/> 
     <jar href="tyrus-websocket-core-1.1.jar"/> 
     <jar href="activation-1.1.jar"/> 
     <jar href="tyrus-container-grizzly-1.2.1.jar"/> 
     <jar href="tyrus-core-1.1.jar"/> 
     <jar href="tyrus-server-1.1.jar"/> 
     <jar href="tyrus-spi-1.2.1.jar"/> 
     <jar href="grizzly-framework-2.3.3.jar"/> 
     <jar href="grizzly-http-2.3.3.jar"/> 
     <jar href="grizzly-http-server-2.3.3.jar"/> 
     <jar href="grizzly-rcm-2.3.3.jar"/> 
     <jar href="javaee-api-7.0.jar"/> 
     <jar href="javax.mail-1.5.0.jar"/> 
     <jar href="jnlp-api-7.0.jar"/> 
     <jar href="javax.websocket-api-1.0.jar"/> 
    </resources> 
    <applet-desc main-class="myPackage.MyApplet" name="name" width="100" height="10"> 
</applet-desc> 

jnlp-file에 주어진 jar는 Eclipse에서 지정된 Java Build Path와 정확히 동일합니다. jar 파일은 서버에 배포되며 웹 브라우저를 통해 액세스 할 수 있습니다.

내 아이디어는 런타임에 tyrus 구현을로드하지 못하는 websockets-api와 관련이 있다고 생각하지만 그 문제를 해결할 방법을 모른다.

답변

0

MANIFEST.MF 파일의 Trusted-Library 속성으로 인해 오류가 발생했습니다. 따라서 비슷한 문제가있는 사람이 있으면 매니페스트 파일에 오류가없고 jnlp 파일과 일치하는지 확인하십시오.