将Java Swing应用程序转换为小程序的工具

4

我有一个很大的Swing项目。是否有任何工具可以将Swing应用程序jar文件转换为小程序?


你能否将你的评论发布为答案,我想要检查一下 :) - confucius
3个回答

4

如果原始项目创建了一个JFrame,您可以通过以下方式轻松获取JFrame的contentPane:

Container contentPane = myFrame.getContentPane();

然后将其添加为JApplet的contentPane,但您会失去菜单等功能。

例如:

public class MyApplet extends JApplet {

   @Override
   public void init() {
      try {
         SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
               JFrame myFrame = new MyFrame("Frame");
               Container contentPane = myFrame.getContentPane();
               setContentPane(contentPane);
            }
         });
      } catch (InterruptedException e) {
         e.printStackTrace();
      } catch (InvocationTargetException e) {
         e.printStackTrace();
      }
   }
}

最好让大多数GUI类从一开始就专注于创建JPanels,这样就不会遇到这种限制。

3
请注意,大多数应用程序会执行沙箱应用程序不允许的操作,例如调用 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)System.exit(0)。从 applet 启动框架或使用其内容绝非像看起来那样简单。 - Andrew Thompson
如果能够实现这里提到的混合初始化,那么对于良好分解的内容将会得到加分。 - trashgod

3

作为另一种选择,您可以使用Java Web Start通过链接启动当前应用程序。不需要转换,并且比部署小程序更容易。


2

这个工具只有4行代码:

public class MyApplet extends Applet {
    public void start() {
         MyApplication.main(new String[0]);
    }
}

此applet将在没有命令行参数的情况下运行您的应用程序。这里的限制是该applet将打开自己的窗口,而不会在浏览器窗口中运行。通常情况下,在浏览器中运行它并不是一件简单的任务,因为布局可能是动态的,并且可能是在JFrame本身上创建的。因此,您需要对应用程序结构有一定的了解才能完全移植它。
好消息是,在大多数情况下,这并不是很难。只需调用添加组件到JFrame的代码与扩展Panel并因此是容器的applet本身一起使用即可。
如果您的应用程序接收参数,则应实现applet的init()方法。

1
此Applet将在没有命令行参数的情况下运行您的应用程序。每次调用start()(例如每次从最小化恢复浏览器时)时都会运行它。请注意,大多数应用程序会执行沙箱化的Applet不允许的操作,例如调用frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)System.exit(0)。启动一个框架并使用其内容从Applet中获取数据从未像看起来那样简单。 - Andrew Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接