【发布时间】:2012-04-05 03:52:12
【问题描述】:
我有一个很大的 Swing 项目。有没有什么工具可以将 Swing 应用的 jar 文件转换成小程序?
【问题讨论】:
-
你能不能@AndrewThompson 发表你的评论作为我想检查的答案:)
我有一个很大的 Swing 项目。有没有什么工具可以将 Swing 应用的 jar 文件转换成小程序?
【问题讨论】:
如果原始项目创建了一个 JFrame,您可以简单地通过
获取 JFrame 的 contentPaneContainer 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 类从一开始就适合创建 JPanel,这样您就不会遇到这个限制。
【讨论】:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) 或System.exit(0)。从小程序启动框架或使用其内容似乎从来没有那么简单。
作为替代方案,您可能希望启动当前应用。来自使用Java Web Start 的链接。无需转换,比部署小程序容易得多。
【讨论】:
该工具有 4 行代码:
public class MyApplet extends Applet {
public void start() {
MyApplication.main(new String[0]);
}
}
这个小程序将在没有命令行参数的情况下运行您的应用程序。这里的限制是,appet 会打开它自己的窗口。它不会运行到浏览器窗口中。在常见情况下将其运行到浏览器中并非易事,因为布局可能是动态的,并且可能在 JFrame 本身上创建。因此,您需要一些应用程序结构的知识才能完全移植它。
好消息是,在大多数情况下,这并不难。只需调用将组件添加到 JFrame 的代码,使用扩展 Panel 的小程序本身,因此是容器。
如果你的应用接收到参数,你应该实现applet的init()方法。
【讨论】:
start() 时(例如每次从最小化状态恢复浏览器时)。请注意,大多数应用程序执行沙盒小程序中不允许的操作,例如调用frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) 或System.exit(0)。从小程序启动框架或使用其内容似乎从来没有那么简单。