首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JWS堆栈溢出错误

JWS堆栈溢出错误
EN

Stack Overflow用户
提问于 2012-02-13 02:14:44
回答 1查看 1.2K关注 0票数 1

我喜欢使用Java将我的Java游戏演示放到Web上,这样用户就可以查看游戏中的角色并与其进行交互等等。

我使用特性将项目导出到jar文件。然后,我能够成功地使用java -jar运行它。我设置了一个test.jnlp文件,如下所示:

代码语言:javascript
复制
    <?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="/home/bili/JWSdeploytest/" href="test.jnlp">
  <information>
    <title>Demo</title>
    <vendor>binman</vendor>
    <description>Test</description>
    <offline-allowed/>
  </information>
  <resources>
    <jar href="LoadbonesFOrmat.jar" main="true"/>
    <extension name="Demo" href="test.jnlp" />
  </resources>
  <security>
    <all-permissions/>
  </security>
  <application-desc />
</jnlp>

我试着在我的机器上进行本地测试,打开调试,我在这里阅读了其他文章:

代码语言:javascript
复制
set JAVAWS_TRACE_NATIVE=1
set JAVAWS_VM_ARGS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket, address=8989,server=y,suspend=n"

但是当我运行javaws test.jnlp时,我得到了StackOverflowError。以下是产出:

代码语言:javascript
复制
bili@bili-SFF:~/JWSdeploytest$ javaws -J test.jnlp 
Exception in thread "Demo" java.lang.StackOverflowError
    at java.util.LinkedHashMap$LinkedHashIterator.<init>(LinkedHashMap.java:362)
    at java.util.LinkedHashMap$LinkedHashIterator.<init>(LinkedHashMap.java:362)
    at java.util.LinkedHashMap$KeyIterator.<init>(LinkedHashMap.java:400)
    at java.util.LinkedHashMap$KeyIterator.<init>(LinkedHashMap.java:400)
    at java.util.LinkedHashMap.newKeyIterator(LinkedHashMap.java:413)
    at java.util.HashMap$KeySet.iterator(HashMap.java:891)
    at java.io.ExpiringCache.cleanup(ExpiringCache.java:117)
    at java.io.ExpiringCache.get(ExpiringCache.java:74)
    at java.io.UnixFileSystem.canonicalize(UnixFileSystem.java:152)
    at java.io.File.getCanonicalPath(File.java:576)
    at sun.security.provider.PolicyFile.canonPath(PolicyFile.java:1872)
    at java.io.FilePermission$1.run(FilePermission.java:203)
    at java.io.FilePermission$1.run(FilePermission.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.io.FilePermission.init(FilePermission.java:200)
    at java.io.FilePermission.<init>(FilePermission.java:266)
    at java.lang.SecurityManager.checkRead(SecurityManager.java:888)
    at net.sourceforge.jnlp.config.DeploymentConfiguration.getProperty(DeploymentConfiguration.java:269)
    at net.sourceforge.jnlp.SecurityDesc.getCustomTrustedPolicy(SecurityDesc.java:172)
    at net.sourceforge.jnlp.SecurityDesc.<init>(SecurityDesc.java:159)
    at net.sourceforge.jnlp.Parser.getSecurity(Parser.java:553)
    at net.sourceforge.jnlp.JNLPFile.parse(JNLPFile.java:594)
    at net.sourceforge.jnlp.JNLPFile.<init>(JNLPFile.java:178)
    at net.sourceforge.jnlp.JNLPFile.<init>(JNLPFile.java:211)
    at net.sourceforge.jnlp.runtime.JNLPClassLoader.getInstance(JNLPClassLoader.java:351)
    at net.sourceforge.jnlp.runtime.JNLPClassLoader.initializeExtensions(JNLPClassLoader.java:370)
    at net.sourceforge.jnlp.runtime.JNLPClassLoader.<init>(JNLPClassLoader.java:174)
    at net.sourceforge.jnlp.runtime.JNLPClassLoader.getInstance(JNLPClassLoader.java:295)
    at net.sourceforge.jnlp.runtime.JNLPClassLoader.getInstance(JNLPClassLoader.java:351)
    at net.sourceforge.jnlp.runtime.JNLPClassLoader.initializeExtensions(JNLPClassLoader.java:370)
    at net.sourceforge.jnlp.runtime.JNLPClassLoader.<init>(JNLPClassLoader.java:174)
    at net.sourceforge.jnlp.runtime.JNLPClassLoader.getInstance(JNLPClassLoader.java:295)
    at net.sourceforge.jnlp.runtime.JNLPClassLoader.getInstance(JNLPClassLoader.java:351)
    at net.sourceforge.jnlp.runtime.JNLPClassLoader.initializeExtensions(JNLPClassLoader.java:370)

这三行295:351:370重复了十几次。在我看来,从输出结果看,好像有一些受限的访问正在进行。我检查并验证了Jar文件jnlp是否允许执行/读取。

我开始怀疑是否需要一个web服务器来测试它。然而,由于我以前从未与JWS合作过,很少有事情会在我的脑海中产生怀疑:

  1. jar文件有问题(我没有正确导出它)
  2. 未正确配置test.jnlp

对于如何解决这个JWS业务,有什么建议吗?

编辑:我删除了扩展元素,它抛出了另一个异常:

代码语言:javascript
复制
    bili@bili-SFF:~/JWSdeploytest$ javaws test.jnlp 
net.sourceforge.jnlp.LaunchException: Fatal: Launch Error: Could not launch JNLP file.
    at net.sourceforge.jnlp.Launcher.launchApplication(Launcher.java:596)
    at net.sourceforge.jnlp.Launcher$TgThread.run(Launcher.java:887)
Caused by: java.lang.IllegalArgumentException: file:/home/bili/JWSdeploytest/LoadbonesFOrmat.jar is not a cacheable resource
    at net.sourceforge.jnlp.cache.CacheUtil.getCacheFile(CacheUtil.java:297)
    at net.sourceforge.jnlp.Launcher.launchApplication(Launcher.java:561)
    ... 1 more
Caused by: 
java.lang.IllegalArgumentException: file:/home/bili/JWSdeploytest/LoadbonesFOrmat.jar is not a cacheable resource
    at net.sourceforge.jnlp.cache.CacheUtil.getCacheFile(CacheUtil.java:297)
    at net.sourceforge.jnlp.Launcher.launchApplication(Launcher.java:561)
    at net.sourceforge.jnlp.Launcher$TgThread.run(Launcher.java:887)

这一个似乎更直观,我肯定这个时间,我没有正确打包Jar文件。以后再试一次。以下是JaNeLA的输出:

代码语言:javascript
复制
content type application/xml does not equal expected type of application/x-java-jnlp-file
XML encoding not known, but declared as utf-8
Codebase '/home/bili/JWSdeploytest/' is a malformed URL!  Defaulting to file:/home/bili/JWSdeploytest/test.jnlp
Codebase '/home/bili/JWSdeploytest/' is a malformed URL!  Defaulting to file:/home/bili/JWSdeploytest/test.jnlp
Codebase '/home/bili/JWSdeploytest/' is a malformed URL!  Defaulting to file:/home/bili/JWSdeploytest/test.jnlp
Codebase '/home/bili/JWSdeploytest/' is a malformed URL!  Defaulting to file:/home/bili/JWSdeploytest/test.jnlp
Downloads can be optimized by specifying a resource size for 'LoadbonesFOrmat.jar'.
The resource download at LoadbonesFOrmat.jar can be optimized by removing the (default) value of download='eager'.
Lazy downloads might not work as expected for LoadbonesFOrmat.jar unless the download 'part' is specified. 

根据JaNeLa在网站上的帮助文件,我将安全元素移至资源元素之上,以摆脱cvc-complex- the .2.4.a。在控制台中,它说文档是有效的,但是数据可能仍然是错误的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-13 02:56:08

JNLP文件有许多可疑的方面。尤其是它是test.jnlp,但也声称加载了同名的扩展名!这可能是导致堆栈溢出的原因。

使用JaNeLA验证JNLP。它还将发现其他一些问题。作为JaNeLA的作者,我很想知道它是否也抛出了一个StackOverflowError,因为它试图验证主JNLP以及任何扩展。我怀疑它会进入一个无限循环(请报告)。

我猜只有一个罐子。如果是这样的话,删除整个extension元素。

顺便说一句,这个罐子真的叫LoadbonesFOrmat.jar吗?这是大写字母的奇怪用法,我会称它为LoadbonesFormat.jarLoadBonesFormat.jar (即没有大写O)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9254788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档