4

我可能在这里遗漏了一些简单的东西,但我在其他地方找不到答案。我只想在我的 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 崩溃(向 Sun 提交了事件 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

显然我缺少一些小程序库,但我已经浏览了 jdk 中的所有 jar,并尝试包括所有列出 JApplet 或 awt 的 jar(plugin.jar、resources.jar、rt.jar、deploy.jar、 javaws.jar)。

另外,我很确定一旦我解决了这个问题,就会有另一个潜伏在它之后,但我会把它留到另一个问题上。

谢谢!


旧版应用程序不是小程序——它是一个胖客户端 Swing 应用程序。我们已经破解了它以作为小程序运行,因为我们的客户想要一个浏览器客户端,这是完成这项工作的最快方式。

我不知道 GWT 是否会接受 JPanel 解决方案 - 该应用程序不是以 GWT 可以解析的任何方式编写的 - 即它没有使用 GWT API,它使用的是 Swing API。AFAIK,将 Swing 与 GWT 混合的唯一方法是以小程序的方式。

我错过了什么吗?

4

6 回答 6

6

您是否正在尝试 GWT 编译您的小程序?

这是行不通的,因为 GWT 编译(只是从 Java 到 Javascript 的翻译)只支持少数 Java 库,当然不支持 applet。

确保您的小程序不在 GWT 源路径上(将其移动到另一个包)。

参考:http ://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&s=google-web-toolkit-doc-1-5&t=RefJreEmulation

于 2009-01-02T16:51:19.120 回答
4

不要使用 GWTCompiler 来编译您的小程序代码。我建议创建仅包含小程序代码的第二个模块(或项目)。使用标准 Javac 编译器(或您的 IDE/ant)将其编译为单独的 JAR

GWTCompiler 使用 Java 库的一个子集,并且应该只用于生成最终将作为 Javascript 运行的代码。

于 2009-01-02T17:10:36.617 回答
1

谷歌发现了这个。其中一个回复说:“之前的发帖人是对的,shell 无法处理 Flash 或 Applets 之类的嵌入式内容。用于在 shell 内部运行浏览器的 SWT 组件存在一些限制。一个错误报告已与这个问题,您可能需要密切关注它以了解未来的更新。”

看来是做不到了。

于 2009-01-02T15:04:22.193 回答
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 即可完成 gui 部分。

小程序 .jar 将需要进入您的 gwt 项目的 /war。

除此以外,.jar您还需要编写一个.jnlp文件来启动小程序。

这将在 gwt 中嵌入一个小程序并以托管或生产模式运行它。关键是签署你的.JAR并启动它.JNLP

于 2012-03-09T18:50:57.460 回答
0

轻量级应用程序可能会混合使用 GWT 和 JNLP。然后我们可以相当透明地将更大的罐子放到人们的机器上。例如,我想使用 Batik 工具包或其他与 SVG 相关的好东西在我的 GWT 应用程序中使用 SVG,而不是被迫只使用 png 或其他光栅格式。

  • Tyro - 您也可以通过 bob.futrelle@gmail.com 将您的想法邮寄给我
于 2010-04-08T16:15:38.310 回答
-1

“无法解析导入 javax.swing” - 抱歉,我不是 GWT 专家,但这个错误是类路径式的。听起来 GWT 无法为您的 JVM 找到 rt.jar。

于 2009-01-02T15:02:19.560 回答