2012-03-23 96 views
0

当我键入t.schedule(umm.setVisible(false), 5);时,我得到的错误和void类型是不允许的。有人可以帮我解决这个问题吗?非静态方法不能被引用,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); 
} 
+2

重新检查'schedule'方法的签名并查看'setVisible'返回类型。 – mishadoff 2012-03-23 00:23:24

+2

另请考虑['javax.swing.Timer' v。'java.util.Timer'](http://java.sun.com/products/jfc/tsc/articles/timer/)。 – trashgod 2012-03-23 00:33:43

+0

@ carl-manaster thx,现在明确:) – 2012-03-23 01:34:16

回答

1

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); 
} 
+0

thx为你的答复,我已经尝试过你的建议,但“非静态”错误仍然显示 – 2012-03-23 00:37:08

+0

umm是类菜单()的成员。 main()是一个静态成员,所以它不能访问umm。我将编辑代码以向您展示解决方法。 – John3136 2012-03-23 00:39:48

+0

哦,我已经修好了,无论如何thx – 2012-03-23 01:23:07

相关问题