Как отобразить java-апплет внутри страницы GWT?
Вопрос
Вероятно, я упускаю здесь что-то простое, но я не могу найти ответ в другом месте.Я просто хочу отобразить апплет в моем коде GWT.
Операционная СИСТЕМА:Windows XP Java:JDK 1.6.0_10 Другое:GWT, GWT-Ext 2.0.5
Вот апплет (очевидно, упрощенный для тестирования):
package foo.applet;
import javax.swing.JApplet;
import java.awt.Graphics;
public class HelloApplet extends JApplet
{
public void paint(Graphics g)
{
g.drawRect(0, 0,
getSize().width - 1,
getSize().height - 1);
g.drawString("Hello world!", 5, 15);
}
}
Вот код, вызывающий это:
package foo.applet;
import com.google.gwt.user.client.ui.HTML;
import com.gwtext.client.widgets.Panel;
public class AppletPanel extends Panel
{
public AppletPanel()
{
HTML applet = new HTML();
applet.setHTML("<applet name=\"HelloApplet\" code=\"HelloApplet.class\" width=\"300\" height=\"300\"" );
this.add(applet);
}
}
Когда я запускаю приложение в режиме хостинга, jvm выходит из строя (зарегистрирован инцидент 1425130 в Sun).
Когда я пытаюсь скомпилировать код GWT для запуска в браузере, я получаю следующее:
[ERROR] Errors in 'file:/C:/<blah>/applet/HelloApplet.java'
[ERROR] Line 3: The import javax.swing cannot be resolved
[ERROR] Line 4: The import java.awt cannot be resolved
[ERROR] Line 6: JApplet cannot be resolved to a type
[ERROR] Line 8: Graphics cannot be resolved to a type
[ERROR] Line 11: The method getSize() is undefined for the type HelloApplet
[ERROR] Line 12: The method getSize() is undefined for the type HelloApplet
Очевидно, мне не хватает какой-то библиотеки апплетов, но я просмотрел все jar-файлы в jdk и попытался включить все те, в которых перечислены JApplet или awt (plugin.jar, resources.jar, rt.jar, deploy.jar, javaws.jar,).
Кроме того, я почти уверен, что как только я решу эту проблему, сразу после нее возникнет другая, но я оставлю это для другого вопроса.
Спасибо!
Устаревшее приложение - это не апплет, это Swing-приложение с толстым клиентом.Мы взломали его для запуска как апплет, потому что нашим клиентам нужен браузерный клиент, и это самый быстрый способ сделать это.
Я не знаю, примет ли GWT решение JPanel - приложение не написано каким-либо образом, который GWT может проанализировать, т.е.он использует не GWT API, а Swing API.AFAIK, единственный способ смешать Swing с GWT - это использовать метод апплета.
Я что-то упускаю?
Решение
Вы пытаетесь GWT-скомпилировать свой апплет?
Это не сработает, поскольку компиляция GWT (которая является просто переводом с Java на Javascript) поддерживает только несколько библиотек Java и, конечно же, не апплеты.
Убедитесь, что ваш апплет не находится в исходном пути GWT (переместите его в другой пакет).
Другие советы
Не используйте GWTCompiler для компиляции кода вашего апплета.Я бы рекомендовал создать второй модуль (или проект), который содержит только код апплета.Скомпилируйте это в отдельный JAR, используя стандартный компилятор Javac (или вашу IDE / ant).
GWTCompiler использует подмножество библиотек Java и должен использоваться только для генерации кода, который в конечном итоге будет выполняться как Javascript.
Google нашел это.В одном из ответов говорится:"Предыдущий постер прав, оболочка не может обрабатывать встроенные вещи, такие как Flash или апплеты.Существуют некоторые ограничения в компоненте SWT, используемом для запуска браузера внутри командной оболочки.С этой проблемой было связано сообщение об ошибке, возможно, вы захотите следить за ним для будущих обновлений ".
Похоже, это невозможно сделать.
Я нашел это во время исследования для gwt
приложение, и хотя это старая тема, я подумал, что хотел бы опубликовать метод для запуска апплета внутри gwt.
Сначала создайте два разных проекта, один для вашего апплета, а другой для gwt
.сделайте свой апплет обычным.
удалите свой апплет.
затем ПОДПИШИТЕ свой .jar
с jarsigner
.
создайте свой gwt
модули в обычном режиме.
для встраивания апплета я использую gwt
HTML-объект с тегом апплета, подобным этому:
(applet MAYSCRIPT code = 'com.myapplet.MyApplet' id ='myApplet' jnlp_href = '/spplets/MyApplet.jnlp', width=500, height=400)(/applet)
Просто добавьте HTML-виджет в ContentPanel, и часть с графическим интерфейсом готова.
Апплет .jar нужно будет перейти в /war для вашего проекта gwt.
Вместе с .jar
вам нужно будет написать .jnlp
файл для запуска апплета.
Это позволит встроить апплет в gwt и запустить его в размещенном или производственном режиме.Главное - ПОДПИСАТЬ свой .JAR
и запустите его с помощью .JNLP
Приложение полутяжелого веса может сочетать GWT и JNLP.Тогда мы могли бы устанавливать банки большего размера на машины людей довольно прозрачно.В качестве примера, я хотел бы использовать Batik toolkit или другие полезные инструменты, связанные с SVG, чтобы иметь SVG в моем приложении GWT, вместо того, чтобы быть вынужденным использовать только png или другие растровые форматы.
- Tyro - вы также можете отправить свои мысли по этому поводу мне по адресу bob.futrelle@gmail.com
"Импорт javax.swing не может быть разрешен" - извините, я не GWT maven, но эта ошибка связана с classpath.Похоже, GWT не может найти rt.jar для вашей JVM.