2013-05-03 2 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

favPic является членом нестатической экземпляра House класса и вы пытаетесь ссылаться на него из вашего статическогоmain метода . Вам нужно создать экземпляр Picture и передать в вместо:

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

Тем не менее, кажется, есть немного более глубокие проблемы с этим кодом, так как ваш метод setFavoritePicture фактически не установлен favPic согласно принятому параметру, он устанавливает его в соответствии с FileChooser.pickAFile и затем присваивает это значение обратно переданному параметру (который ничего не достигает).

Может быть, вы хотите сделать что-то вроде этого, вместо:

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

Update: По поводу вашего комментария:

мне нужно, в рамках метода '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. Я не думаю, что он понимает ООП. Ему нужно просто избавиться от вар и использовать это. – Nix

+0

И тогда обратите внимание, что метод 'setFavouritePicture' на самом деле ничего не делает в данный момент ... установка значения параметра не изменяет состояние объекта. –

+0

разве я этого не делал? – Alex

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