EventDispatchThread.run()行:eclipse中不可用的错误

时间:2013-01-06 16:07:34

标签: java eclipse swing layout-manager

我是Swing的新手,并且正在Eclipse中创建一个非常基本的事件处理程序。 这是我写的代码:

public class SwingDemo2 {

JLabel jl;

public SwingDemo2() {
    JFrame jfr = new JFrame("Swing Event Handling");
    jfr.setSize(250, 100);
    jfr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    jl = new JLabel();
    jl.setVisible(false);

    JButton jb1 = new JButton("OK");
    jb1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            jl.setText("You Pressed OK");
            jl.setVisible(true);
        }
    });

    JButton jb2 = new JButton("Reset");
    jb2.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            jl.setText("You Pressed Reset");
            jl.setVisible(true);
        }
    });

    jfr.setLayout(new BorderLayout());
    jfr.add(jl, SwingConstants.NORTH);
    jfr.add(jb1, SwingConstants.EAST);
    jfr.add(jb2, SwingConstants.WEST);
    jfr.setVisible(true);
}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            new SwingDemo2();
        }
    });
}

}

Eclipse提示我打开调试透视图,在那里他向我显示错误:
Thread [AWT-EventQueue-0] (Suspended (exception IllegalArgumentException)) EventDispatchThread.run() line: not available [local variables unavailable]

当我使用FlowLayout代替BorderLayout时,我没有收到任何错误。

我一直在尝试查找门户网站上的错误信息,我遇到了this类似的问题。答案是在不解释问题的情况下改变一堆设置(这也没有帮助)。请解释错误,以便我可以确保不重复。 Thanx提前!

注意:更新了错误消息

2 个答案:

答案 0 :(得分:4)

尝试使用

jfr.add(jl, BorderLayout.PAGE_START);
jfr.add(jb1, BorderLayout.LINE_START);
jfr.add(jb2, BorderLayout.LINE_END);

Java Docs的重要提示:

Before JDK release 1.4, the preferred names for the various areas were different, 
ranging from points of the compass (for example, BorderLayout.NORTH for the 
top area) to wordier versions of the constants we use in our examples. 
The constants our examples use are preferred because they are standard and 
enable programs to adjust to languages that have different orientations.

有关BorderLayout的更多信息,请参阅How to use BorderLayout

要真正知道你为什么会遇到这个错误我只是在代码中写了这两行

System.out.println("SwingConstants.NORTH : " + SwingConstants.NORTH);
System.out.println("BorderLayout.PAGE_START : " + BorderLayout.PAGE_START);

给出了如下输出:

SwingConstants.NORTH : 1
BorderLayout.PAGE_START : First

SwingContants上使用BorderLayout Constraints值时,查看输出可以了解,问题是什么。

答案 1 :(得分:4)

  • 使用BorderLayout代替SwingConstant s,jfr.add(jl, BorderLayout.NORTH);

  • SwingConstants已针对TextLayout实施,而不适用于JComponents layout