2013-05-03 80 views
1

我被下面的代碼卡住了一個問題。當我嘗試調用setFavoritePicture方法時,我不斷收到主方法中的編譯器錯誤。它表示非靜態變量favPic不能從靜態上下文中引用。我相對較新的Java,所以任何幫助,將不勝感激!非常感謝!非靜態變量favPic不能從靜態上下文中引用

public class House 
{ 
    String owner; 
    Picture pRef; 
    Picture [] picArray; 
    Picture favPic; 

    public void setFavoritePicture (Picture pRef) 
    { 

    Picture favPic = new Picture (FileChooser.pickAFile()); 
    pRef = favPic ; 


    } 



    public static void main (String [] args) 
    { 
    House PhDsHouse = new House ("Mad PH.D."); 
    PhDsHouse.setFavoritePicture (favPic); 


    } 


} 

回答

1

favPicHouse類的非靜態實例成員,你正試圖從你的靜態main方法中引用它。您需要創建的Picture一個實例,並把它傳遞代替:

Picture pic = new Picture(FileChooser.pickAFile()); 
PhDsHouse.setFavouritePicture(pic); 

但是,似乎有與此代碼稍微更深層次的問題,如根據傳遞的參數你setFavoritePicture方法並不實際設置favPic,它會根據FileChooser.pickAFile進行設置,然後將該值分配給傳遞的參數(不會實現任何內容)。

也許你想要做這樣的事情,而不是:

public void setFavoritePicture (Picture pRef) 
{ 
    favPic = pRef; 
} 

更新:關於你的評論:

我需要的 'setFavoritePicture' 的方法中,使用選擇一個圖片, 'FileChooser.pickAFile()'。這就是這個 方法的全部意義。

在這種情況下,爲什麼你需要一個參數?也許這樣?

public class House 
{ 
    String owner; 
    Picture [] picArray; 
    Picture favPic; 

    public void setFavoritePicture() 
    { 
     Picture pic = new Picture (FileChooser.pickAFile()); 
     this.favPic = pic; 
    } 

    ... /* Rest of your class here */ 

    public static void main (String [] args) 
    { 
     House PhDsHouse = new House ("Mad PH.D."); 
     PhDsHouse.setFavoritePicture(); 
    } 
} 

在上面的代碼,您實例化你House,然後調用其setFavoritePicture方法。如果創建新圖片後的所有邏輯都通過該方法處理,包括對FileChooser.pickAFile的調用,則不需要傳遞任何內容。

話雖如此,但在我看來,的setFavoritePicture的責任應該是設置對象的喜歡的圖片,並在處理文件選擇和用戶輸入應該在其他地方(如我在前面的例子中,pRef被外界實例化完成的方法並通過)。

+0

Hes這樣做setFavouritePicture裏面。我不認爲他理解OOP。他需要擺脫變種並使用它。 – Nix 2013-05-03 21:53:07

+0

然後注意''setFavouritePicture'方法實際上沒有做任何事情......設置參數的值不會改變對象的狀態。 – 2013-05-03 21:53:16

+0

我沒有那樣做嗎? – Alex 2013-05-03 21:54:42

相關問題