代码之家  ›  专栏  ›  技术社区  ›  yannis

如何在GWT页面中显示Java Applet?

  •  4
  • yannis  · 技术社区  · 16 年前

    我可能遗漏了一些简单的东西,但我在别处找不到答案。我只想在我的GWT代码中显示一个小程序。

    操作系统:Windows XP Java:JDK 1.60EY10 其他: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提交事件142530)。

    当我试图编译在浏览器中运行的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
    

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

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

    谢谢!


    传统应用程序不是小程序-它是一个厚客户端Swing应用程序。因为我们的客户想要一个浏览器客户端,这是最快的实现这一点的方法,所以我们对它进行了黑客攻击,将其作为小程序运行。

    我不知道GWT是否会接受jpanel解决方案——这个应用程序不是以GWT能够解析的任何方式编写的——也就是说,它不使用GWT API,而是使用Swing API。阿法克,将Swing与GWT混合的唯一方法是使用applet的方式。

    我错过什么了吗?

    6 回复  |  直到 10 年前
        1
  •  6
  •   Yoni Roit    16 年前

    您是否正在尝试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

        2
  •  4
  •   Andrew Newdigate    16 年前

    不要使用gwtcompiler来编译小程序代码。我建议创建只包含小程序代码的第二个模块(或项目)。使用标准javac编译器(或您的ide/ant)将其编译到单独的jar中。

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

        3
  •  1
  •   duffymo    16 年前

    谷歌发现 this .其中一个回答说:“前一张海报是对的,外壳不能处理嵌入的东西,如闪存或小程序。SWT组件中存在一些限制,用于在shell内部运行浏览器。一个bug报告已经与此问题关联,您可能需要密切关注它以备将来的更新。”

    好像做不到。

        4
  •  1
  •   pankar    12 年前

    我是在一个 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。

    随着 罐子 你需要写一个 .jnlp 启动小程序的文件。

    这将在GWT中嵌入一个小程序,并以托管或生产模式运行它。关键是签你的 .JAR 然后用 .JNLP

        5
  •  0
  •   Bob Futrelle    14 年前

    一个轻量级的应用程序可能会混合GWT和JNLP。 然后我们可以把更大的罐子透明地放到人们的机器上。 例如,我希望使用batik工具包或其他与SVG相关的产品在我的GWT应用程序中使用SVG,而不是被迫只使用PNG或其他光栅格式。

    • 蒂罗-你也可以通过bob.futrelle@gmail.com把你对此的想法发送给我。
        6
  •  -1
  •   duffymo    16 年前

    “import javax.swing无法解决”-抱歉,我不是GWT Maven,但这是类路径类型的错误。听起来GWT找不到你的JVM的rt.jar。