EDITED 2/2/2013
在你的一些答案和我发现的简单Swing应用指南的帮助下,我能够取得一点进展,我现在把它全部放在一个类中。然而,我仍然无法让它关闭,我不得不做一个按钮来做它,因为它真的很烦人不得不拉起任务管理器。工具提示也不起作用。我不知道它是否重要,但我在Eclipse中这样做。
import javax.swing.SwingUtilities;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Thing extends JFrame
{
private static final long serialVersionUID = 1L;
public Thing()
{
setTitle("Thing");
setSize(1024, 768);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
JPanel panel = new JPanel();
getContentPane().add(panel);
panel.setLayout(null);
panel.setToolTipText("A panel container");
JButton quit = new JButton("Quit");
quit.setBounds(50, 60, 80, 30);
quit.setToolTipText("A button component");
quit.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
System.exit(0);
}
});
panel.add(quit);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
Thing thing = new Thing();
thing.setVisible(true);
}
});
}
}
当我尝试用X关闭它时,这是它给出的错误。(关闭时关闭工作正常)
java.lang.NoClassDefFoundError: sun/awt/TimedWindowEvent
at sun.awt.windows.WToolkit.eventLoop(Native Method)
at sun.awt.windows.WToolkit.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
答案 0 :(得分:2)
出于某种原因,我无法关闭它并且必须使用任务管理器。
使用SwingUtilies.invokeLater()
创建GUI。
http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
答案 1 :(得分:1)
Toolkit.getDefaultToolkit().getImage("image.jpg")
可能使用后台加载程序从主绘制线程(或事件调度线程,AKA EDT)加载图像。
这基本上意味着,该方法将立即返回,但图像实际上不会被加载。
这是为低容量带宽系统做的(早在旧时代),以防止系统在下载和加载到内存中的图像时停止。现在几天,这不是一个值得关注的问题。
相反,在Title
的构造函数中,您应该预先加载图像...
private BufferedImage background;
public Title() throws IOException {
background = ImageIO.read(new File("image.jpg"));
}
并使用paintComponent
方法......
public void paintComponent(Graphics g)
{
super.paintComponent(g);
if (background != null) {
g.drawImage(background, 0, 0, this);
}
}
当前加载图像的方法存在的其他问题涉及它如何处理错误。您当前的方法将倾向于默默消耗错误,并且很难确定实际出错的地方。
您可以查看JButton only show up on mouseover了解更多完整示例
答案 2 :(得分:0)
我不确定你是否解决了问题,但我遇到了类似的问题:对于我的应用程序,我扩展了JFrame,但是无法使用任何setDefaultCloseOperation(...)关闭或隐藏它。在最小化,恢复或最大化框架时,我得到了与上面相同的错误。
我修复了它将jdk和jre更新为最新的Java 1.7 并使用它。在eclipse中,转到Window > Preferences > Java > Installed JREs
并选择最新的Java 如果使用64位系统,最好也使用64位Java 。在子菜单> Execution Environment
中,选择左侧的Java 1.7和右侧的兼容Java 1.7 64位JRE。
我不确定究竟是什么问题,但我猜测Java 64位应用程序和32位运行时环境之间可能存在一些不兼容性。