Как отобразить java-апплет внутри страницы GWT?

StackOverflow https://stackoverflow.com/questions/406963

  •  03-07-2019
  •  | 
  •  

Вопрос

Вероятно, я упускаю здесь что-то простое, но я не могу найти ответ в другом месте.Я просто хочу отобразить апплет в моем коде 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 (переместите его в другой пакет).

Ссылка: http://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&s=google-web-toolkit-doc-1-5&t=RefJreEmulation

Другие советы

Не используйте 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top