2012-03-23 112 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

相關問題