使用Open Web Start执行JNLP文件报错问题求助
问题:Open Web Start运行Oracle Forms JNLP时出现
netscape/javascript/JSException类找不到错误 我有一个基于Java Web Start的旧Applet,启动该Applet使用的JNLP文件如下:
<?xml version="1.0" encoding="utf-8"?> <jnlp spec="6.0+" codebase="http://11.161.4.122:7777/aw_htm/"> <information> <title>Webstart Oracle Forms</title> <vendor>www.testtest.it</vendor> <homepage href="http://www.testtest.it/"/> <description>Webstart Oracle Forms</description> <icon kind="shortcut" href="http://11.161.4.122/aw_htm/AW_3.ico" /> <shortcut online="true"> <desktop /> <menu submenu="Avvio vvvvvv" /> </shortcut> </information> <security> <all-permissions/> </security> <update check="timeout" policy="always"/> <resources> <java version="1.6.0+"/> <jar href="frmallIM_runtimeHalt.jar" download="eager" main="true"/> <jar href="awsicon.jar"/> <jar href="yyy-pjc-core.jar"/> <jar href="yyy-pjc-util-print.jar"/> <jar href="yyy-pjc-anpr-samlgenerator.jar"/> <jar href="frmwebutil.jar"/> <jar href="FormsGraph.jar"/> </resources> <applet-desc name="Webstart Oracle Forms" main-class="oracle.forms.engine.Main" width="990" height="660"> <param name="background" value="sfondo11g-dark.jpg"/> <param name="logo" value="logomim.gif"/> <param name="serverApp" value="default"/> <param name="lookAndFeel" value="oracle"/> <param name="allow_debug" value="true"/> <param name="separateFrame" value="true"/> <param name="em_mode" value="1"/> <param name="latencyCheck" value="true"/> <param name="networkRetries" value="240"/> <param name="serverArgs" value="escapeParams=true module=A00LOGIN.fmx userid= debug=no host= port= jvmcontroller=yyyweb buffer_records=no debug_messages=no array=no obr=no query_only=no quiet=yes render=no record= tracegroup= log= term=/home2/xxx/lib/xxx.res P_SEPARATEFRAME=true P_ADRS= P_ALIAS=xx P_IDSSO= P_AMBIENTE= P_ENTE= P_LINGUA= P_APPLICAZIONE= P_HTTPHOST=11.161.4.122:7777"/> <param name="serverURL" value="http://11.161.4.122:7777/forms/lservlet?ifcfs=http://11.161.4.122:7777/forms/frmservlet?config=yyyWEBJPI_8&ifsessid=WLS_FORMS.formsapp.999&acceptLanguage=it-IT;"/> <param name="colorScheme" value="teal"/> <param name="splashScreen" value="prodotto.gif"/> <param name="clientDPI" value="96"/> <param name="dontTruncateTabs" value="true"/> </applet-desc> </jnlp>
因公司需维护该产品,我选择仍在维护的Open Web Start作为Java Web Start的替代方案,已安装Open Web Start,但运行上述JNLP文件时出现以下错误:
[ITW-CORE][2024-06-20 16:22:45.064 CEST][DEBUG][com.openwebstart.proxy.direct.DirectProxyProvider] Using NO_PROXY for http://11.161.4.122:7777/aw_htm/netscape/javascript/JSException.class [ITW-CORE][2024-06-20 16:22:45.119 CEST][ERROR][net.sourceforge.jnlp.Launcher] General Throwable encountered: java.lang.NoClassDefFoundError: netscape/javascript/JSException at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671) at java.lang.Class.getConstructor0(Class.java:3075) at java.lang.Class.newInstance(Class.java:412) at net.sourceforge.jnlp.Launcher.createApplet(Launcher.java:565) at net.sourceforge.jnlp.Launcher.launchApplet(Launcher.java:489) at net.sourceforge.jnlp.Launcher.access$400(Launcher.java:72) at net.sourceforge.jnlp.Launcher$TgThread.run(Launcher.java:665) Caused by: java.lang.ClassNotFoundException: netscape.javascript.JSException at net.sourceforge.jnlp.runtime.classloader.JNLPClassLoader.lambda$loadClass$9(JNLPClassLoader.java:1452) at java.util.Optional.orElseThrow(Optional.java:290) at net.sourceforge.jnlp.runtime.classloader.JNLPClassLoader.loadClass(JNLPClassLoader.java:1452) ... 8 more
我使用Java 8运行所有程序,请问这是配置问题还是Open Web Start与该JNLP或Applet不兼容?
问题分析
netscape.javascript.JSException属于Java SE的plugin.jar,在Java 8环境中该jar包默认存在,但Open Web Start的类加载机制可能未自动包含这个系统jar,或者安全策略限制了Applet对该类的访问,导致出现类找不到的错误。这属于配置问题,而非Open Web Start与JNLP/Applet的兼容性问题。
解决步骤
修改JNLP的Java配置:在
<resources>下的<java>标签中添加JVM参数,强制加载plugin.jar:<java version="1.6.0+" args="-Djnlp.include.plugin.jar=true"/>也可以显式指定类路径包含系统的
plugin.jar:<java version="1.6.0+" args="-classpath ${java.home}/lib/plugin.jar"/>检查Open Web Start安全设置:
- 确保Open Web Start将JNLP所在站点添加到信任列表,若JNLP未签名,需手动信任该发布者。
- 确认Open Web Start的运行时环境为Java 8,可在Open Web Start的设置中指定Java 8作为默认JRE。
验证Oracle Forms依赖完整性:
- 检查JNLP中引用的
frmallIM_runtimeHalt.jar等包是否包含Forms运行所需的全部依赖,尤其是与JavaScript交互相关的类。 - 确认使用的Oracle Forms版本与Java 8兼容,部分旧版本Forms需安装官方补丁才能适配Java 8。
- 检查JNLP中引用的
尝试添加扩展引用:在JNLP的
<resources>中添加Java Plugin扩展引用,确保加载相关系统组件:<extension name="Java Plug-In" href="http://java.sun.com/products/plugin/1.6.0/plugin.jnlp"/>
内容的提问来源于stack exchange,提问作者Soku
相关产品推荐
相关产品推荐

