Как отобразить Java-апплет на странице GWT? - PullRequest
4 голосов
/ 02 января 2009

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

Я что-то упустил?

Ответы [ 6 ]

6 голосов
/ 02 января 2009

Вы пытаетесь 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

4 голосов
/ 02 января 2009

Не используйте GWTCompiler для компиляции кода вашего апплета. Я бы порекомендовал создать второй модуль (или проект), который содержит только код апплета. Скомпилируйте это в отдельный JAR, используя стандартный компилятор Javac (или вашу IDE / ant) ​​

GWTCompiler использует подмножество библиотек Java и должен использоваться только для генерации кода, который в конечном итоге будет работать как Javascript.

1 голос
/ 09 марта 2012

Я обнаружил это во время исследования приложения 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

1 голос
/ 02 января 2009

Google нашел это . В одном из ответов говорится: «Предыдущий плакат прав: оболочка не может обрабатывать такие встроенные объекты, как Flash или Applets. Существуют некоторые ограничения в компоненте SWT, используемом для запуска браузера внутри оболочки. Отчет об ошибке связан с В этом выпуске вы можете следить за будущими обновлениями. "

Похоже, это невозможно сделать.

0 голосов
/ 08 апреля 2010

Полутяжелое приложение может смешивать GWT и JNLP. Тогда мы могли бы прозрачно доставлять большие банки на машины людей. Например, я хотел бы использовать инструментарий Batik или другие полезности, связанные с SVG, чтобы иметь SVG в моем приложении GWT, вместо того, чтобы использовать только png или другие растровые форматы.

  • Тайро - вы также можете высылать свои мысли по этому поводу мне на bob.futrelle@gmail.com
0 голосов
/ 02 января 2009

«Импорт javax.swing не может быть разрешен» - извините, я не GWT maven, но эта ошибка в стиле classpath Похоже, GWT не может найти rt.jar для вашей JVM.

...