Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Апплеты > Сдохли аплеты при переходе на JRE 1.6


Автор: _Y_ 21.4.2009, 11:27
Лет 8-9 назад написал я серию аплетов. Работали в свое удовольствие без проблем. Все аплеты читают данные из тэга <param name=DATA value="......, размещенного внутри тега <applet... ну и демонстрируют что им положено.

Вчера получил жалобу, что аплеты работают не на всех компьютерах. Обследование показало, что на компьютерах с Java машиной версии 1.5 аплеты работают, а с 1.6 - уже не работают. Вид браузера не важен. Исследование естественно проводилось не по всему Инету, а только на доступных мне 5-6 компах.

Вот сообщение об ошибке:
Код

java.lang.NumberFormatException: For input string: "4
"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at DataString.read_int(DataString.java:69)
    at SE1.ReadData(SE1.java)
    at SE1.init(SE1.java)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Exception: java.lang.NumberFormatException: For input string: "4
"

Возникает подозрение, что в новой версии Java пытается парсить число из строки, включающей символ конца строки. Но это исколючительно догадка.

Сталкивался ли кто-нибудь с подобной проблемой? Если да, то может есть способ простого решения? Например, решения в рамках HTML документа?

 Очень не хочется поднимать старые Java коды и переписывать аплеты. Дело в том, что с тех пор аплетов я не писал и совершенно забыл как это делается. 

Помогите, люди добрые, потерявшему последние знания smile  

Автор: AntonSaburov 21.4.2009, 14:12
Сделай на строку trim() - удалит все пробелы и переводы строки.

Автор: math64 21.4.2009, 15:41
А тег param введён в одну строку, или так:
Код

<param name=DATA value="4
">

Автор: _Y_ 22.4.2009, 11:40
math64, именно "так" тег param и введён. Данных там немеряно и в одну строку его не вогнать.

Вот, кстати, демо одного из этих аплетов http://www.sitey.narod.ru/dimo/dimo.htm

Автор: math64 22.4.2009, 13:20
Если не хочешь менять апплет - вводи всё в одну строку, в html ограничения на длину строк нет. Или создавай тег с помощью javascript.

Автор: _Y_ 26.4.2009, 12:40
Покорился судьбе: нашел старые исходники, нашел в аплете строку дающую ошибку, вставил trim(). Пытаюсь скомпилировать посредством javac, а она ругается: 
Class names are only accepted if anotation processing is explicitly reuested
Подскажите, пожалуйста, какую анотацию и куда воткнуть? Чем ей мой старый-добрый код не нравится?

math64, в одну строку будет очень неудобно. Аплеты универсальные. Заменой/корректировкой данных меняется смысл того, что аплет делает/представляет. Данные и так трудно менять, а если они будут в одну строку - полная смерть.

Автор: math64 26.4.2009, 23:03
Код

<script language="javascript">
document.writeln("<applet code='MyClass.class' archive='myjar.jar' width='100' height='100'>");
document.writeln("<param name=DATA value='" +
 "this is " +
 "long data" +
"'>");
document.writeln("</applet>");
</script>


Добавлено через 10 минут и 47 секунд
К тому же можно написать небольшую программу преобразующий html из старого вида в новый,
но исправить апплет работы будет меньше.
Насчёт аннотаций приведи строки кода на которую ругается компилятор.

Автор: _Y_ 27.4.2009, 10:24
math64, спасибо, со скриптом-то все ясно, но менять все равно придется сами аплеты. Страниц испльзующих каждый аплет очень уж много – замучаюсь. Да и исследование показало, что проблема, скорее всего, решится исправлением одного-двух классов, которые используются для ввода данных во всех аплетах. Правда согласятся ли старые файлы сотрудничать с новыми-перекомпиллировамными еще вопрос. Но посмотрим.

По аннотациям. Компилятор обижается не на строку, а на само имя класса. Выдает вот такой ответ:
Код

>javac -sourcepath  C:/путь/ DataString
error: Class names, 'DataString', are only accepted if annotation processing is explicitly requested
1 error

>
Я пробовал переименовать класс (и внутри кода и сам файл) – бесполезно. Что-то ему не нравится, а что я не знаю.

Автор: math64 29.4.2009, 09:50
Попробуй вызвать компилятор так:
Код

> javac -sourcepath  "C:/путь/" DataString.java

Автор: _Y_ 29.4.2009, 11:58
math64, спасибо, так тоже не работает, но натолкнуло на правильную мысль. Сработала такая строка:
Код

javac ../../../путь от С/DataString.java

Т.е. какие-то непонятные мне заморочки были с параметром -sourcepath и, в придачу, абсолютный путь не работает. Годится только относительный к директории, содержащей  исполняемый файл javacа

Но в любом случае проблема решена. Спасибо  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)