繁体   English   中英

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

[英]non-static variable favPic cannot be referenced from a static context

我在下面的代码中遇到了一个问题。 我尝试调用setFavoritePicture方法时,在main方法中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);


   }


}  

favPicHouse类的一个非静态实例成员,您正尝试从您的静态 main方法中引用它。 您需要创建一个Picture实例并将其传递给它:

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

但是,此代码似乎存在更深层的问题,因为您的setFavoritePicture方法实际上favPic根据传递的参数设置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和通过)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM