【问题标题】:Deployed JNLP applet cannot find library: Incompatible magic value 1130458734部署的 JNLP 小程序找不到库:不兼容的魔法值 1130458734
【发布时间】:2013-01-17 14:34:39
【问题描述】:

我正在尝试使用JNLP 部署我的小程序。我试过使用 Eclipse Run Jetty Run 插件,它工作正常。但是现在在真正的 Web 服务器上进行部署时,我真的陷入了困境。

我的 jnlp 文件草图是这样的(我已经编辑了一些名称)。

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" href="MyApplet.jnlp">
    <information>
        <title>MyApplet</title>
        <vendor>Me</vendor>
        <offline-allowed/>
    </information>
    <security>
        <j2ee-application-client-permissions/>
    </security>
    <resources>
        <!-- Application Resources -->
        <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
        <jar href="applet.jar" part="true" main="true"/>
        <jar href="log4j-1.2.16.jar" part="true"/>
        <jar href="slf4j-api-1.6.1.jar" part="true"/>
        <jar href="slf4j-log4j12-1.6.1.jar" part="true"/>
    </resources>
    <!--  Generate values dynamically -->
    <applet-desc main-class="org.project.applet.AppletMain" name="MyApplet" width="1600" height="860"/>
</jnlp>

我将库保存在与applet.jar 相同的文件夹中。

关于applet.jar 中的清单文件我不确定,我已经尝试了很多选项,比如指定库,或者只是. 目前它就像在 Ant 脚本中一样

Java applet jnlp + libraries

<manifest>
    <attribute name="Class-Path" value="."/>
    <attribute name="Rsrc-Class-Path" value="./"/>
</manifest>

所有 jar 都已签名,这是我从控制台日志中得到的:

basic: Applet loaded.
basic: Applet resized and added to parent container
basic: PERF: AppletExecutionRunnable - applet.init() BEGIN ; jvmLaunch dt 134206 us, pluginInit dt 7621660339 us, TotalTime: 7621794545 us
network: Cache entry not found [url: http://mydomain.com/play/, version: null]
network: Cache entry not found [url: http://mydomain.com/play/org/apache/log4j/Logger.class, version: null]
network: Connecting http://mydomain.com/play/org/apache/log4j/Logger.class with proxy=DIRECT
network: Connecting http://mydomain.com/play/org/apache/log4j/Logger.class with cookie "PHPSESSID=fe5gv8p4hp013r6i9p5aqjska5"
network: Connecting http://mydomain.com:80/ with proxy=DIRECT
network: Connecting http://mydomain.com/play/org/apache/log4j/Logger.class with cookie "PHPSESSID=fe5gv8p4hp013r6i9p5aqjska5"
basic: JNLP2ClassLoader.findClass: org.apache.log4j.Logger: try again ..
network: Cache entry not found [url: http://mydomain.com/play/org/apache/log4j/Logger.class, version: null]
network: Connecting http://mydomain.com/play/org/apache/log4j/Logger.class with proxy=DIRECT
network: Connecting http://mydomain.com/play/org/apache/log4j/Logger.class with cookie "PHPSESSID=fe5gv8p4hp013r6i9p5aqjska5"
basic: Dialog type is not candidate for embedding
basic: JNLP2ClassLoader.getPermissions() ..
network: Cache entry not found [url: http://mydomain.com/play/org/apache/log4j/Logger.class, version: null]
security: JAVAWS AppPolicy Permission requested for: http://mydomain.com/play/org/apache/log4j/Logger.class
basic: JNLP2ClassLoader.getPermissions() X
java.lang.ClassFormatError: Incompatible magic value 1130458734 in class file org/apache/log4j/Logger
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.defineClassHelper(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.access$100(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)
    at org.project.applet.AppletMain.init(AppletMain.java:32)
    at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.init(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
security: Reset deny session certificate store

第 32 行是

Logger.getRootLogger().setLevel(Level.OFF);

它是applet中的第一个类,应该从外部库中加载。

所有 jars、htmls 和 jnlps 都在 http://mydomain.com/play/ 中,我访问 applet http://mydomain.com/play/applet.html

来自Incompatible magic value 1008813135 我了解到1130458734 表示Cann,如果访问http://mydomain.com/play/org/apache/log4j/Logger.class,我真的得到Cannot find block '__global__'

但我不明白为什么在 jar 中搜索类会失败,以及为什么它会尝试访问服务器上从未存在的 http://mydomain.com/play/org/apache/log4j/Logger.class

编辑:

我的 html 文件来自 Oracle 教程:

<html>
<head>
    <title>MyApplet</title>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    <script src="http://www.java.com/js/deployJava.js"></script>
</head>
<body>
    <script>
        var attributes = {code:'org.project.applet.AppletMain', width:1600, height:860} ;
        var parameters = {jnlp_href: 'MyApplet.jnlp'} ;
        deployJava.runApplet(attributes, parameters, '1.6');
    </script>
</body>
</html>

【问题讨论】:

  • 我假设 URL 在 applet 的类路径中,并且由于 Web 服务器返回一条消息而不是一些 HTTP File Not Found 状态代码,它认为它有一个可以使用的类。
  • “我不明白..为什么它会尝试访问mydomain.com/play/org/apache/log4j/Logger.class有关该部分的解决方案,请参阅this answer
  • 请报告更改codebase_lookup参数的结果。这个难题实际上似乎比仅仅设置一个参数更复杂。
  • @AndrewThompson,我不太明白该放在哪里。在applet-desc 标记中的 jnlp 文件中?
  • @PeterLawrey,配置网络服务器以响应 404 似乎可以解决这个问题。我还有更多,但会在单独的问题中发布。如果你愿意,我可以接受你的答案,如果你发布一个。

标签: java jar applet jnlp java-web-start


【解决方案1】:

彼得·劳瑞:

我假设小程序的类路径中的 URL,并且由于 Web 服务器返回一条消息而不是一些 HTTP File Not Found 状态代码,它认为它有一个可以使用的类。

这是一个很好的猜测!网络服务器没有在任何未找到的资源的标头中返回 404 错误,它只返回一些文本。因此 Java 将其解释为好像找到了资源并且尝试将其作为 Java 类加载失败。

【讨论】:

    猜你喜欢
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2012-05-06
    • 2011-09-13
    • 2020-07-09
    相关资源
    最近更新 更多