我有一个简单的 Main 类,它使用 swing 来显示 Hello World 标签,但我对此代码有些怀疑,因为这是我第一次用 Java 创建 GUI:
import javax.swing.JLabel;
import org.jdesktop.application.SingleFrameApplication;
public class Main extends SingleFrameApplication {
@Override
protected void startup() {
// TODO Auto-generated method stub
show(new JLabel("Hello World"));
}
public static void main(String[] args) {
Main a = new Main();
a.startup();
}
}
我的疑问是:
据我所知,JLabel(( 方法是一个纯粹的 Swing 方法,它只是创建一个显示 Hello World 消息的文本标签。这段代码还使用了startup((方法,据我所知,该方法是属于所谓的Swing应用程序框架的**SingleFrameApplication类的方法...但。。。这个 Swing 应用程序框架到底是什么?它是与 Swing 分开的项目吗?给我什么?
当我将应用程序作为经典 Java 应用程序运行时,会显示 Hello World 消息,但在 Eclipse 控制台中也向我显示以下错误消息:
set 23, 2013 12:35:37 PM org.jdesktop.application.ResourceManager getApplicationResourceMap Avvertenza: getApplicationResourceMap((: no 应用程序类集 23, 2013 12:35:38 PM org.jdesktop.application.SingleFrameApplication initRootPaneContainer Avvertenza: 无法恢复会话 [mainFrame.session.xml] java.lang.NullPointerException at org.jdesktop.application.LocalStorage.getApplicationId(LocalStorage.java:254( 在 org.jdesktop.application.LocalStorage.getDirectory(LocalStorage.java:274( 在 org.jdesktop.application.LocalStorage$LocalFileIO.getFile(LocalStorage.java:450( 在 org.jdesktop.application.LocalStorage$LocalFileIO.openInputFile(LocalStorage.java:417( 在 org.jdesktop.application.LocalStorage.openInputFile(LocalStorage.java:68( at org.jdesktop.application.LocalStorage.load(LocalStorage.java:188( 在 org.jdesktop.application.SessionStorage.restore(SessionStorage.java:381( 在 org.jdesktop.application.SingleFrameApplication.initRootPaneContainer(SingleFrameApplication.java:210( 在 org.jdesktop.application.SingleFrameApplication.show(SingleFrameApplication.java:268( at Main.startup(Main.java:11( at Main.main(Main.java:19(
为什么?这到底是什么意思?
嘟嘟
安德里亚
若要创建并显示带有 Hello World 标签的窗口,至少需要执行以下操作:
- 实例化 JFrame (链接(。
- 将您的 JLabel 添加到其中。
- 显示框架。
关于如何制作框架(链接(的预言机教程向您展示了如何做到这一点。 为了便于参考,我从那里复制了定义/显示窗口的特定摘录。
JFrame frame = new JFrame("FrameDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel emptyLabel = new JLabel("");
emptyLabel.setPreferredSize(new Dimension(175, 100));
frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);
//Display the window.
frame.pack();
frame.setVisible(true);
您正在扩展 SingleFrameApplication
,这是一个为您执行 UI 设置和初始化的框架类,但您没有向其提供任何必要的配置信息。