2009-01-02 4 views
4

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

Когда я пытаюсь скомпилировать код 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 

Очевидно, что я не хватает какой-то апплет библиотеку, но я grepped через все банки в JDK и попытался включить все те, которые перечисляют JApplet или awt (plugin.jar, resources.jar, rt.jar, deploy.jar, javaws.jar).

Кроме того, я уверен, как только я решу эту проблему, есть еще один, скрывающийся сразу после него, но я сохраню это для другого вопроса.

Спасибо!


Унаследованное приложение не является апплетом - это приложение с толстым клиентом Swing. Мы взломали его, чтобы работать как апплет, потому что нашим клиентам нужен клиент браузера, и это самый быстрый способ сделать это.

Я не знаю, примет ли GWT решение JPanel - приложение не написано никоим образом, что GWT может анализировать - то есть он не использует API GWT, он использует Swing API. AFAIK, единственный способ смешать Swing с GWT будет в апплетах.

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

ответ

6

Вы пытаетесь скомпилировать свой апплет 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

-1

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

1

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

Похоже, что это невозможно.

4

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

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

0

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

  • Тиро - Вы можете также отправить ваши мысли об этом мне в [email protected]
1

Я нашел это в ходе исследования для gwt приложения, и даже если это старая нить подумал, что я отправлю метод для запуска апплета внутри gwt.

Сначала создайте два отдельных проекта, один для вашего апплета и один для gwt. Сделайте свой апплет как обычно.

jar ваш апплет.

затем ПОДПИШИТЕ .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

+0

это сработало для меня! Благодаря! – user1448906