将Java应用程序转换为小程序时出现问题
我正在尝试将一个正常工作的简单Java应用程序转换成一个小程序。该应用程序由main.java和goey.java组成 Main.java goey.java 看起来像这样。 我似乎无法让它作为小程序运行。当我在debug中运行它时,会打开一个applet窗口,然后会弹出JFrame窗口(就像在应用程序中一样)。作为一个应用程序,它按预期运行,但如何将控件放入小程序窗口?将Java应用程序转换为小程序时出现问题,java,swing,applet,awt,japplet,Java,Swing,Applet,Awt,Japplet,我正在尝试将一个正常工作的简单Java应用程序转换成一个小程序。该应用程序由main.java和goey.java组成 Main.java goey.java 看起来像这样。 我似乎无法让它作为小程序运行。当我在debug中运行它时,会打开一个applet窗口,然后会弹出JFrame窗口(就像在应用程序中一样)。作为一个应用程序,它按预期运行,但如何将控件放入小程序窗口? 我是新来的。感谢您的帮助 我建议您先看看小程序教程。。。。小程序需要一个init方法,而不是main方法(除其他外)->我建
我是新来的。感谢您的帮助 我建议您先看看小程序教程。。。。小程序需要一个init方法,而不是main方法(除其他外)->我建议您先看看小程序教程。。。。小程序需要有一个init方法,而不是main(除其他外)->好吧,JApplet本身就是一个Swing容器,因此您必须在类中使用小程序的内容窗格
goey
,而不是总是使用JFrame(这是一个桌面窗口,不能与小程序一起工作)
尝试将JApplet或JFrame传递给goey()
构造函数,而不是在该类中创建JFrame
编辑:您的构造函数可能如下所示:
public gooey(RootPaneContainer c){
c.getRootPane().setJMenuBar(mb);
mb.add(mnuFile);
mb.add(mnuHelp);
pnlNorth.add(btnNorth);
c.getContentPane().setLayout(new BorderLayout());
c.getContentPane().add(pnlNorth, BorderLayout.NORTH);
}
那么就这样称呼它:
JFrame f = new JFrame(...);
new gooey(f);
或
您也可以在主类中执行此操作,因为它已经是一个小程序实例
new gooey(this);
只有在处理JFrame时才应该调用
setBounds(…)
。好吧,JApplet本身就是一个Swing容器,因此您必须在类gooey
中使用小程序的内容窗格,而不是始终使用JFrame(这是一个桌面窗口,不能与小程序一起工作)
尝试将JApplet或JFrame传递给goey()
构造函数,而不是在该类中创建JFrame
编辑:您的构造函数可能如下所示:
public gooey(RootPaneContainer c){
c.getRootPane().setJMenuBar(mb);
mb.add(mnuFile);
mb.add(mnuHelp);
pnlNorth.add(btnNorth);
c.getContentPane().setLayout(new BorderLayout());
c.getContentPane().add(pnlNorth, BorderLayout.NORTH);
}
那么就这样称呼它:
JFrame f = new JFrame(...);
new gooey(f);
或
您也可以在主类中执行此操作,因为它已经是一个小程序实例
new gooey(this);
setBounds(…)
只能在处理JFrame时调用。我有一个init方法(请参见代码)。Main是我们班的名字。小程序将初始化,但控件将在单独的JFrame中打开。很抱歉,您是对的。。。你的代码很难读!我错过了。。。本质上,问题在于您使用的JFrame。。。这是一个桌面窗口,不是一个与applet相关的类。我有一个init方法(请参阅代码)。Main是我们班的名字。小程序将初始化,但控件将在单独的JFrame中打开。很抱歉,您是对的。。。你的代码很难读!我错过了。。。本质上,问题在于您使用的JFrame。。。这是一个桌面窗口-不是与小程序相关的类。谢谢。。请你再详细说明一下好吗?我试过容器c=这个;把c传给gooey。在使用c.getContentPane()之前,我需要执行一些类型转换吗?当我执行JApplet a=this时,它就起作用了;谢谢(请编辑您的答案以反映相同的情况)@anirudh我不确定您在哪里做了JApplet a=this但是我得说这看起来有点尴尬。我宁愿不更新答案,也不想推广稍微好一点的风格;)谢谢请你再详细说明一下好吗?我试过容器c=这个;把c传给gooey。在使用c.getContentPane()之前,我需要执行一些类型转换吗?当我执行JApplet a=this时,它就起作用了;谢谢(请编辑您的答案以反映相同的情况)@anirudh我不确定您在哪里做了JApplet a=this但是我得说这看起来有点尴尬。我宁愿不更新答案,也不想推广稍微好一点的风格;)“我正在尝试将一个工作简单的Java应用程序转换为一个小程序”为了更好的用户体验和更低的维护成本,请使用从网页直接启动框架。@Andrew谢谢!它是否需要任何客户端应用程序安装?它将需要一个工作Java安装,其中Webstart的版本至少为您所需的版本。请注意,两年前,一些64位JRE没有提供Webstart,但我不确定这是否仍然相关。“它(JWS)是否需要任何客户端应用程序安装?”简短回答,没有。长回答,没有。大约从1.4版开始,JWS就与JRE联合捆绑在一起。JWS旨在作为Java富客户端的“一键式”安装选项。这是我的页面中一个非常简单的例子。另外,请确保您按照我先前的链接访问该信息。JWS的标签。它有许多与JWS部署相关的信息链接。“我正在尝试将一个工作简单的Java应用程序转换为一个小程序”,为了更好的用户体验和更低的维护成本,请使用直接从网页启动框架。@Andrew谢谢!它是否需要任何客户端应用程序安装?它将需要一个工作Java安装,其中Webstart的版本至少为您所需的版本。请注意,两年前,一些64位JRE没有提供Webstart,但我不确定这是否仍然相关。“它(JWS)是否需要任何客户端应用程序安装?”简短回答,没有。长回答,没有。大约从1.4版开始,JWS就与JRE联合捆绑在一起。JWS旨在作为Java富客户端的“一键式”安装选项。这是我的页面中一个非常简单的例子。另外,请确保您按照我先前的链接访问该信息。JWS的标签。它有许多与JWS部署相关的信息链接。