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