2013-05-04 2 views
-1

Я пытаюсь установить изображение в методе setFavoritePicture (Picture pRef). Этот метод должен установить любимый снимок, который будет вызываться в основном методе, но я продолжаю получать ошибку компилятора nonstatic variable pRef cannot be referenced from a static context. Я относительно новым для Java, так что любая помощь вы могли бы предоставить мне было бы очень признателенНестатическая переменная pRef не может ссылаться на статический контекст

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

public void showArtCollection() 
    { 

    ArtWall aWall = new ArtWall(600,600); 
    aWall.copyPictureIntoWhere(favPic,250,100); 
    aWall.copyPictureIntoWhere(picArray[0],51,330); 
    aWall.copyPictureIntoWhere(picArray[1],151,330); 
    aWall.copyPictureIntoWhere(picArray[2],351,280); 
    aWall.show(); 

    } 



public House (String param) 
{ 

    this.owner = param; 
    this.picArray = new Picture [3]; 
    this.favPic = new Picture (FileChooser.pickAFile()); 
    this.picArray [0] = new Picture (FileChooser.pickAFile()); 
    this.picArray [1] = new Picture (FileChooser.pickAFile()); 
    this.picArray [2] = new Picture (FileChooser.pickAFile()); 




} 

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

public void setOneOtherPicture (int which,Picture pRef) 
{ 

} 


public void swapGivenOtherWithFavorite (int which) 
{ 
    Picture tempSaver; 
    tempSaver = pRef; 
    pRef = picArray [which]; 
    picArray [which] = tempSaver; 
} 


public void addPicture (Picture pictureAdded) 
{ 
pRef = pictureAdded; 


} 

public void showPicture() 
{ 

picArray [0].explore(); 
picArray [1].explore(); 
picArray [2].explore(); 
favPic.explore(); 


} 


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


} 

}

+0

Я не могу воспроизвести ошибку вашего компилятора (хотя, по общему признанию, мне пришлось изобретать все недостающие классы). Какая строка в вашем предыдущем коде является ошибкой? –

+0

@ DuncanJones Jones Я только что исправил код, потому что понял, что одна часть отсутствует, ошибка появляется здесь 'PhDsHouse.setFavoritePicture (pRef);' – Bradley

ответ

1

Ошибки, которые я вижу в следующем:

PhDsHouse.setFavoritePicture (pRef); где pRef определяется в main ? Таким образом, вы получаете ошибку в этом утверждении.

Я предполагаю, что вы хотите создать новый объект Picture, а затем назначьте его PhDsHouse, используя setFavoritePicture. Это правда? Если да, вам нужно сделать что-то вроде Picture pRef = new Picture(); перед вашим setFavoritePicture ... тогда вам должно быть хорошо.

Кроме того, следующая функция выглядит очень подозрительно ко мне

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

Если это будет

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

, потому что я не вижу, где favPic было определено/инициализируется в коде ... . вы получите NULL pointer exceptions при доступе pRef, так как favPic - NULL, который будет присвоен pRef.

Смежные вопросы