2012-02-13 4 views
1

Мне нравится использовать Java Web Start для демонстрации моей Java-игры в Интернете, чтобы пользователь мог просматривать и взаимодействовать с игровыми персонажами и так далее.Ошибка переполнения стека JWS

Я экспортировал проект в файл jar с использованием функции запуска экспортной функции Eclipse. Затем я смог успешно запустить его с java -jar. Я создал test.jnlp файл, как показано ниже:

<?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> 

Я пытался проверить его локально на моей машине с отладкой включения, что я читал из другого поста здесь:

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. Ниже выведено:

[email protected]:~/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 разрешен для выполнения/чтения.

Я начинаю задаваться вопросом, нужен ли мне веб-сервер для его проверки. Однако несколько вещей, которые ставят под сомнение в моем уме, как я никогда не работаю с JWS раньше:

  1. Что-то не так с файлом банку (я не экспортировать его правильно)
  2. test.jnlp не настроен правильно

Любые указания относительно того, как я могу решить этот бизнес JWS?

Edit: я удалил элемент Удлинитель и он бросает еще одно исключение:

[email protected]:~/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) 

Это одна кажется более понятным, и я уверен, это timethat я не упаковали файл Jar правильно. Повторите попытку позже. Вот выход из Джанеле:

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. 

Я переместил элемент безопасности выше элемента ресурсов, чтобы избавиться от CVC-комплекс-type.2.4.a: в соответствии с файлом справки Джанеле на веб-сайте. В консоли говорится, что документ действителен, но данные могут быть ошибочными!

+0

Вы добавили тег 'applet' к вопросу, но JNLP указывает, что это приложение (JWS может запускать либо). Это апплет или нет? –

+0

это не апплет извините! Это было очень рано, и я просто пытался закончить вопрос. – bili

+0

Спасибо за подтверждение (и хороший смысл редактировать теги). :) –

ответ

2

В JNLP-файле имеется ряд подозрительных аспектов. Большинство особенно, что это test.jnlp, но также заявляет, что загружает расширение с тем же именем! Это может быть причиной переполнения стека.

Подтвердить JNLP, используя JaNeLA. Он также определит некоторые другие проблемы. Будучи автором JaNeLA, мне будет интересно услышать, если он также выбрасывает StackOverflowError, так как он пытается проверить основной JNLP , а также любое расширение. Я подозреваю, что он войдет в бесконечный цикл (пожалуйста, сообщите об этом).

Я предполагаю, что есть только один Jar. Если это так, удалите весь элемент extension.

BTW - это Jar действительно называется LoadbonesFOrmat.jar?Это очень странное использование букв в верхнем регистре, я бы назвал его LoadbonesFormat.jar или LoadBonesFormat.jar (т. Е. Нет верхнего регистра O).

+0

Спасибо. Я попробую позже, когда вернусь домой и отчитаюсь. И да, это действительно называется LoadbonesFOrmat.jar, но это должен был быть LoadbonesFormat.jar. Я точно не помню, как это произошло ... – bili

+0

Да, вы на месте, есть только один файл Jar! – bili

+0

Прохладный. В этом случае JaNeLA должно многое сказать о файле JNLP (комментарий 1). –

Смежные вопросы