2013-03-22 32 views
0

爲了節省內存,我想創建類,只要它們是需要的,以後再使用。僅在需要時才創建Java對象?

我的班級是這樣的:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 


public class Engine implements ActionListener { 

    JFileChooser fileChooser = new JFileChooser(); 
    Boolean addWindow = false; 

    Engine(){} 

    //@ void actionPerformed() 
    public void actionPerformed(ActionEvent evt){ 

     if (evt.getActionCommand().equals("add")) { 
      if (addWindow = false) { 
       Add Add = new Add(); 
       Add.setVisible(true); 
      } 
      else Add.setVisible(true); 
     } 
    } 
} 

(只是一個一流的項目)

我認爲我自己只是一個愚蠢的錯誤,但我無法弄清楚。

但是,如果我嘗試編譯它說:

Engine.java:21: error: non-static method setVisible(boolean) cannot be referenced from a static context: else Add.setVisible(true); (Marker is at the point between Add and setVisible().)

我不想重新添加類每次。只要已經創建就重用。

+0

if(addWindow = false){should be == probably ... – TofuBeer 2013-03-22 04:25:13

回答

3
Add add = new Add(); 
if (addWindow == false) { //Thanks to @TofuBeer's comment. I didn't notice this at all.   
    add.setVisible(true); 
} 
else 
    add.setVisible(true); 

由於您使用的Add(這是該類自己的名字),它試圖調用該方法,靜態,這是引發錯誤作爲其不是一個靜態的方法,在你Add類。

使用您創建的實例來調用該方法,並確保實例名稱不完全是類名稱(類名稱與大寫A)。

添加 - 類名

添加 - 實例名稱(如果你給Add這裏。此外,它會考慮類名稱,而不是實例名)。

+0

只會部分工作,因爲'add'將作用於'if'區塊,而在'else'中不可用。 – 2013-03-22 04:16:51

+0

完全一樣的是在我的代碼;) – 2013-03-22 04:18:32

+0

你確定它完全一樣嗎? Java是'CASE-SENSITIVE'。記住這一點。 – SudoRahul 2013-03-22 04:20:41