Как Rolls-Royce развертывает Java-апплет?

Я знаю, как развернуть апплет с использованием тегов applet, object, embed и JavaScript, но мне нужен лучший подход (с точки зрения удобства работы конечного пользователя).

Sun предлагает использовать тег апплета и смешанное встраивание / тег объекта на той же странице.

Я рассматриваю следующее:

  1. Кроссбраузерная поддержка.
  2. Откат к странице загрузки при обнаружении неправильной версии Java (например, до 1.5).
  3. Страница загрузки как для периода запуска виртуальной машины Java, так и для загрузки Jar (в идеале это настраиваемый экран-заставка с индикатором выполнения).

Вопросы задавались и раньше: как развернуть, проверьте 1.6 и Платформа плагинов < / а>. Ни один из них полностью не отвечает на мой вопрос. Я также не рассматриваю веб-запуск или Java FX.

Мое текущее решение - включить дополнительный небольшой тестовый апплет, скомпилированный для Java 1.1. Если обнаружена версия Java до 1.5, она перенаправляет страницу на страницу сбоя. Если Java не найдена, страница просит пользователя посетить java.com. Это работает приемлемо, но плохо, потому что требует дополнительного апплета и ничего не показывает при запуске виртуальной машины.


person Community    schedule 22.06.2009    source источник
comment
Не могли бы вы подробнее рассказать о том, что вы подразумеваете под «Роллс-Ройсом»?   -  person Steve Kuo    schedule 22.06.2009
comment
Красочный способ сказать «лучший / лучший».   -  person Pool    schedule 23.06.2009


Ответы (9)


См. решение PulpCore (лицензия: BSD).

Пример: игра Milpa ... теперь это развертывание апплета Rolls-Royce, если я когда-либо его видел .

И - абсолютно согласен, Sun's Deployment Toolkit остро нуждается в работе с отключенной Java - в настоящее время он, похоже, полностью игнорирует это.

person Rob Whelan    schedule 05.12.2009

После долгой борьбы со старой и устаревшей информацией по всему Интернету кажется, что на самом деле есть действительно простой способ развертывания апплетов - просто позвольте Sun написать за вас правильные теги!

<script src="http://java.com/js/deployJava.js"></script>
<script>
  var attributes = {
    code:'java2d.Java2DemoApplet.class',
    archive:'Java2Demo.jar',
    width:710, 
    height:540
  };
  var parameters = {
    fontSize:16
  };
  var version = '1.6' ; // whichever minimum version you want to target, null works also
  deployJava.runApplet(attributes, parameters, version);
</script>

Работал для меня как шарм, кросс-браузер, с автоматическим перенаправлением на страницу загрузки, если java не установлена.

Больше информации здесь:

http://java.sun.com/javase/6/docs/technotes/guides/jweb/deployment_advice.html#deplToolkit

person jcoffey    schedule 25.06.2009
comment
Извините за задержку с ответом, мне пришлось приостановить расследование этого вопроса. При использовании Firefox (и отключении Java через параметры) это не удается. Апплет не отображается, программа установки или перенаправление не выполняется. Это немного раздражает, что даже у Sun ничего не работает. - person Pool; 28.10.2009
comment
Это сработало для меня в браузерах с не установленной java - возможно ли, что Firefox распознает, что java присутствует, но отключен? - person jcoffey; 30.10.2009
comment
В случае использования скрытого апплета, который использует javascript для управления DOM, не забудьте включить эти параметры. параметры var = {mayscript: 'true', скрипт: 'true'}; - person Sandeep; 20.08.2011
comment
Это не работает правильно в Chrome, если у вас установлено несколько JRE: stackoverflow.com/questions/8011154/ - person mmutilva; 14.11.2011

Я считаю JavaScript лучшим решением. Для IE напишите тег объекта и управляйте точной минимальной версией JRE с помощью атрибут classid, для всего остального тег embed с type =" application / x-java-applet; version = 1.5 "работает нормально. Оба используют встроенные механизмы браузера для борьбы с устаревшей (или полным отсутствием) java.

Вы также можете делать необычные вещи, например указывать 1.5.0 в качестве минимальной версии, но устанавливать автоматическая загрузка до версии 1.6, поэтому любой, у кого нет java, получит последнюю версию JRE вместо 1.5.

Проект, над которым я работаю, уже много лет использует нашу собственную кроссплатформенную оболочку JS, но с обновлением Java 6 10 Sun создала deployJava.js, цель которого - решить все эти проблемы за вас.

person Spyder    schedule 24.06.2009

+1 к пулу для applet-fu у меня сработало на chrome, FF, IE 6,7,8. Я не думаю, что он может получить больше роллс-ройса, чем здесь:

http://products.metamolecular.com/2009/06/08/better-applet-deployment-with-applet-fu http://github.com/metamolecular/applet-fu

Вроде совсем простая вещь, документации тоже не так много. Но в этом вся прелесть !!

applet_fu.run(
  {'width':'550','height':'320'},
  {
    'archive':'myapplet.jar',
    'code':'com/example/MyApplet.class',
    'foo':'bar'
  },
  '1.4.2',
  '<img src="/no-java.png" />'
);

Да, правильно, вы можете вставить html, чтобы отобразить, если апплет не найден. Часть 1.4.2 - это минимальная версия, которую необходимо проверить. Если будет найдена более ранняя версия, Java все равно не будет отображаться. foo: bar - это пример params.

person Community    schedule 06.10.2010

Я настоятельно рекомендую не использовать deployJava.js. Я сомневаюсь, что это было проверено где-нибудь. Взгляните на его код:

s = '<param name="' + parameter + '" value="' + 
                parameters[parameter] + '">';

Это не закрывает тег! И Chrome задыхается от этого полностью, давая мне «Неперехваченная ошибка: INVALID_STATE_ERR: DOM Exception 11»! Не говоря уже об использовании document.write, с которым вам придется бороться с помощью таких вещей, как этот Java Plug- В - Важное дополнение к deployJava.js.

Зарегистрировался только для того, чтобы сказать это, так как на днях я провел четыре часа в полном отчаянии, разбираясь с этим :(

person Community    schedule 26.10.2010

Для наилучшей кроссбраузерной совместимости вам следует следовать советам SUn, особенно по использованию смешанных тегов embed / object. Это некрасиво, но дает лучшее покрытие.

person skaffman    schedule 22.06.2009
comment
Я обнаружил, что подход Sun имел проблемы с перенаправлением браузеров на страницу загрузки (или в файл загрузки), если Java не была доступна - мне будет интересно узнать об опыте других людей. - person Pool; 22.06.2009

Подумайте о наличии небольшого апплета на начальной странице, который сообщает браузеру перейти на настоящую страницу апплета.

На начальной странице также есть ссылка «Вы можете получить Java здесь».

По моему опыту, неприятный javascript дает неприятную поддержку :(

Также обратите внимание, что Java 6 u 10 может использовать Java WebStart для развертывания апплетов. Это может быть более приятным для пользователя, если у ваших пользователей эта версия или более поздняя.

person Thorbjørn Ravn Andersen    schedule 22.06.2009
comment
Спасибо, это похоже на мое текущее решение, за исключением того, что я перенаправляю в случае сбоя. Я добавил в вопрос более подробный абзац. - person Pool; 23.06.2009
comment
Чем больше информации вы предоставите изначально, тем точнее вы получите ответы ... - person Thorbjørn Ravn Andersen; 23.06.2009

Привет, просто используйте тег объекта. Это часть спецификации HTML и работает с большинством браузеров.

Резервный вариант с установкой - это просто написание текста в теге.

Вот полезная статья на эту тему:

http://depth-first.com/articles/2008/02/20/demystifying-java-applets-part-1-cross-browser-standards-compliant-pure-html-deployment-using-the-object-tag

С Уважением

person tovare    schedule 04.02.2010
comment
Интересно, спасибо - в начале этой статьи есть ссылка на то, что, по их словам, заменяет ее Applet-fu librabry products.metamolecular.com/2009/06/08/ - Впервые я услышал об этом - завтра займусь расследованием. - person Pool; 04.02.2010
comment
Повеселись ! Обратите внимание, что метод объекта также отлично работает. (Я предпочитаю разметку, а не скрипты) :-) - person tovare; 04.02.2010

Имейте в виду, что deployJava.js предназначен для вызова во время загрузки документа. Поэтому, если вы вставляете апплет динамически, после события, после того, как DOM был построен, вам не повезло с этим новым стандартным подходом. Нам пришлось использовать конструкцию object / embed / noembed.

Изменить: кто-то нашел для этого способ получше, но для этого потребовалось вручную изменить исходный файл deployJava.js от SUN, см. ссылку ниже: Подключаемый модуль Java - важное дополнение к deployJava.js

person Community    schedule 24.07.2010