1

我在下面的代码中遇到了一个问题。当我尝试调用该setFavoritePicture方法时,我在主方法中不断收到编译器错误。它说非静态变量 favPic 不能从静态上下文中引用。我对java比较陌生,所以对此有任何帮助将不胜感激!非常感谢!

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


   }


}  
4

1 回答 1

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

更新:关于您的评论:

我需要在“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在方法之外实例化并传入)。

于 2013-05-03T21:52:15.277 回答