尝试使用setVisible(false)关闭JLabel并处置但不能从类型Window中对非静态方法dispose()进行静态引用

时间:2016-06-11 15:56:03

标签: java jframe

好的,所以我是一个初学程序员,试图进行一个测验,这个代码用于弹出一个勾号,当他们得到正确的东西我现在制作我的计划是使用Thread.sleep(2000)来制作2秒延迟,然后使用.setVisible(false)或.dispose但当我尝试使用其中任何一个来关闭它时,消息说(不能从类型Window对静态方法setVisible(boolean)进行静态引用)。所以任何人都可以向我推荐任何替代方法来做到这一点,我可以通过做这项工作或使用其他方法让事情在2秒后关闭。

import java.awt.Color;
import java.awt.EventQueue;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class Correct extends JFrame {

private JPanel contentPane;

/**
 * Launch the application.
 */
public static void main(String[] args) {





    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Correct frame = new Correct();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 * @throws InterruptedException 
 */
public Correct() throws InterruptedException {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(650, 250, 600, 500);
    contentPane = new JPanel();
    contentPane.setBackground(Color.WHITE);
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    JLabel label = new JLabel("");
    label.setIcon(new ImageIcon("D:\\Eclipse\\Coursework2017\\src\\check-146095_960_720.png"));
    label.setBackground(Color.WHITE);
    label.setBounds(104, 0, 384, 463);
    contentPane.add(label);

    Thread.sleep(2000);//To make the pop up close after 2 seconds
    Correct.(false);



}

}

1 个答案:

答案 0 :(得分:0)

最好把的代码放在构造函数之外的对象上。构造函数仅用于初始化对象。

public class Correct extends JFrame {
    /**
     * Create the frame.
     * @throws InterruptedException
     */
    public Correct() {
        setSize(500, 500);
        // ...
    }

    static void showAndClose() throws InterruptedException {
        Correct frame = new Correct();
        frame.setVisible(true);
        Thread.sleep(2000);
        frame.dispose();
    }

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    showAndClose();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

[你的代码没有编译,你的问题有点不清楚]