Java 无法引用非静态方法,不允许使用void类型

Java 无法引用非静态方法,不允许使用void类型,java,swing,Java,Swing,当我输入t.schedule时(umm.setVisible(false),5)我得到该错误,不允许使用void类型。有人能帮我澄清一下吗 public class menu extends JFrame{ JLabel bgmenu=new JLabel(); JLabel java=new JLabel(); JLabel umm=new JLabel(); JLayeredPane jLayeredPane1=new JLayeredPane(); public menu(){

当我输入
t.schedule时(umm.setVisible(false),5)我得到该错误,不允许使用void类型。有人能帮我澄清一下吗

public class menu extends JFrame{
JLabel bgmenu=new JLabel();
JLabel java=new JLabel();
JLabel umm=new JLabel();
JLayeredPane jLayeredPane1=new JLayeredPane();

public menu(){

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    //label
    umm.setIcon(new javax.swing.ImageIcon("D:\\Job\\Kuliah\\4\\DAMG\\Game\\pic\\umm.jpg")); 
    umm.setBounds(0, 0, 1024, 709);
    java.setIcon(new javax.swing.ImageIcon("D:\\Job\\Kuliah\\4\\DAMG\\Game\\pic\\java.jpg"));
    java.setBounds(0, 0, 1024, 709);
    bgmenu.setIcon(new javax.swing.ImageIcon("D:\\Job\\Kuliah\\4\\DAMG\\Game\\pic\\interfacemainmenu.jpg"));
    bgmenu.setBounds(0, 0, 1024, 709);

    //posisi
    jLayeredPane1.add(umm, javax.swing.JLayeredPane.DEFAULT_LAYER);
    jLayeredPane1.add(java, javax.swing.JLayeredPane.DEFAULT_LAYER);
    jLayeredPane1.add(bgmenu, javax.swing.JLayeredPane.DEFAULT_LAYER);

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jLayeredPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 1024, javax.swing.GroupLayout.PREFERRED_SIZE)
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jLayeredPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 709, javax.swing.GroupLayout.PREFERRED_SIZE)
    );

    pack();
}
public static void main(String[] args) {
    new menu().setVisible(true);
    Timer t=new Timer();
    //get error here under this comment
    t.schedule(umm.setVisible(false), 5);
}

Timer.schedule()的第一个参数应该是TimerTask。您正在传递void(即umm.setVisible()的结果)

您需要将setVisible()包装到TimerTask的run()方法中

只是打印出来,没有测试,所以一些细节可能是可疑的,但我认为它接近你需要的。我相信有很多“真实”的例子

class MyTimer extends TimerTask
{
    private menu theMenu = null;
    public MyTimer(Menu m)
    {
        this.theMenu = m;
    }
    public void run()
    {
        // you need to add 
        // public void setUmmVisibility(boolean s)
        // { this.umm.setVisible(s); }
        // to the menu class.
        this.theMenu.setUmmVisibility(false);
    }
}

public static void main(String[] args) {
    menu m = new menu();
    m.setVisible(true);
    Timer t=new Timer();
    t.schedule(new MyTimer(m, 5);
}

重新检查“代码>日程安排< /代码>方法的签名,并查看<代码> SETTABLE < /Cord>返回类型。也请考虑。@ CARL Maunter THX,它现在清楚:)THX为您的答复,我已经尝试了您的建议,但是“非静态”错误仍然显示UUMUM是类MNUE()的成员。main()是静态成员,因此无法访问umm。我将编辑代码以向您展示解决方法。