почему я получаю UnsupportedClassVersionError в jnlp? - PullRequest
2 голосов
/ 30 мая 2009

Я получаю UnsupportedClassVersionError при запуске jnlp, однако, когда я пытаюсь запустить соответствующие файлы jar из командной строки, все работает нормально. Я попытался установить версии j2se на 1.5+, 1.6+, используя подписанные / неподписанные файлы jar, но все это не помогает.

Я пытаюсь запустить свой собственный файл jar с двумя файлами поддержки jar (mysql-connector.jar и swingx.jar). Мой файл jar был скомпилирован с настройками соответствия 1.6 в Eclipse и встроен в jar с ant. Так как я могу запустить 3 jar из командной строки, используя java 1.6, я немного озадачен тем, что jnlp не работает. Любая помощь приветствуется.

Вот файл jnlp:

<?xml version="1.0" encoding="utf-8"?>
<!-- JNLP File -->
<jnlp spec="1.5+" codebase="http://www.etc.com/p" href="demo-daily.jnlp">
 <information>
  <title>demo: daily stock charting utility</title>
  <offline-allowed/>
 </information>
 <security>
 </security>
 <resources>
  <j2se href="http://java.sun.com/products/autodl/j2se" version="1.6+" />
  <jar href="demo-daily.jar" main="true" />
  <jar href="swingx.jar" main="false" />
  <jar href="mysql-connector.jar" main="false" />
 </resources>
 <application-desc main-class="quipu.viewers.charts.stockcharts.daily"/>
</jnlp>

Я получаю ошибку:

java.lang.UnsupportedClassVersionError: Неверный номер версии в файле .class в java.lang.ClassLoader.defineClass1 (собственный метод) в java.lang.ClassLoader.defineClass (ClassLoader.java:675) в java.security.SecureClassLoader.defineClass (SecureClassLoader.java:124) в java.net.URLClassLoader.defineClass (URLClassLoader.java:260) на java.net.URLClassLoader.access $ 100 (URLClassLoader.java:56) на java.net.URLClassLoader $ 1.run (URLClassLoader.java:195) at java.security.AccessController.doPrivileged (собственный метод) на java.net.URLClassLoader.findClass (URLClassLoader.java:188) в com.sun.jnlp.JNLPClassLoader.findClass (JNLPClassLoader.java:256) в java.lang.ClassLoader.loadClass (ClassLoader.java:316) в java.lang.ClassLoader.loadClass (ClassLoader.java:251) на com.sun.javaws.Launcher.doLaunchApp (Launcher.java:1052) на com.sun.javaws.Launcher.run (Launcher.java:105) at java.lang.Thread.run (Thread.java:613)

Ответы [ 2 ]

1 голос
/ 30 мая 2009

Сначала откройте окно CMD или окно оболочки (в зависимости от используемой ОС) и введите:

java -version

, чтобы убедиться, что версия, на которой вы работаете, является версией, которую вы ожидаете запустить. Затем снова из командной строки введите команду:

javaws http://host/path/to/your.jnlp

Если вы не можете запустить javaws из командной строки, вам придется выяснить, где он установлен, и использовать полный путь к исполняемому файлу. Под Windows это будет что-то вроде

C:\Program Files\Java\jre1.6.0_14\bin\javaws.exe

и в Linux это может быть /usr/bin/javaws или в другом каталоге.

Я знаю, что в Windows, во всяком случае, при запуске любого приложения Java Web Start загрузчик JNLP используется из самой последней установленной версии Java. Или, по крайней мере, он должен это сделать. Я не экспериментировал с Linux (или MacOS), чтобы увидеть, как он там работает. Но всегда возможно, что что-то испортилось, и когда вы запускаете JNLP, вы случайно запускаете средство запуска JNLP Java 1.5.

Вы всегда можете попытаться удалить и переустановить самую последнюю версию Java, чтобы убедиться, что последняя и самая лучшая версия установлены правильно. Это может исправить вещи. Вы также можете проверить свой $ PATH (или% PATH%), чтобы убедиться, что на пути указана правильная версия Java. (Это не всегда необходимо ... но если какая-либо версия Java находится на пути, убедитесь, что это именно та версия, которую вы хотите.) Проверьте переменную среды JAVA_HOME, чтобы убедиться, что она указывает туда, где вы думаете, что она делает.

0 голосов
/ 30 мая 2009

Просто предположение, но обновите открывающий тег до ссылочной спецификации = "1.6 +"

<jnlp spec="1.6+" codebase="http://www.etc.com/p" href="demo-daily.jnlp">
...