Java 无法从静态上下文引用非静态变量pRef

Java 无法从静态上下文引用非静态变量pRef,java,variables,compiler-errors,Java,Variables,Compiler Errors,我正在尝试在方法setFavoritePicture(picture pRef)中设置图片。 这个方法应该设置一个在main方法中调用的最喜欢的图片,但是我一直收到一个编译器错误,它说非静态变量pRef不能从静态上下文中引用。我对java比较陌生,所以如果您能为我提供任何帮助,我将不胜感激 public class House { String owner; Picture pRef; Picture [] picArray; Picture favPic; public void

我正在尝试在方法
setFavoritePicture(picture pRef)
中设置图片。 这个方法应该设置一个在main方法中调用的最喜欢的图片,但是我一直收到一个编译器错误,它说
非静态变量pRef不能从静态上下文中引用。我对java比较陌生,所以如果您能为我提供任何帮助,我将不胜感激

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 ();


 }

}我看到的错误如下:

PhDsHouse.setFavoritePicture(pRef)
main
中定义的
pRef
在哪里?因此,您在该语句中遇到了错误

我猜,您希望创建新的
Picture
对象,然后使用
setFavoritePicture
将其分配给
PhDsHouse
。这是真的吗?如果是,您需要执行类似于
Picture pRef=new Picture()的操作
设置收藏夹图片之前。。。那你应该很好

另外,以下函数在我看来非常可疑

public void setFavoritePicture (Picture pRef)
{
 pRef = favPic;
}
应该这样吗

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

因为,我看不到
favPic
在代码中的定义/初始化位置……否则当您访问
pRef
时,您将得到
NULL指针异常,因为
favPic
NULL
,它将被分配给
pRef
,我无法重现您的编译器错误(尽管我不得不承认我发明了所有缺失的类)。你上面代码中的哪一行是错误?@DuncanJones我刚刚修复了代码,因为我意识到有一部分缺失,错误出现在这里
PhDsHouse.setFavoritePicture(pRef);