【问题标题】:class constructor cannot be accessed by outside package外部包无法访问类构造函数
【发布时间】:2011-10-26 04:56:30
【问题描述】:

所以我找不到一个已经问过的问题来回答我的确切问题。我有一个我在 Eclipse 中编写的包,我将其导出为 jar 库以在处理 ide 中使用。在处理中,我有一个草图,其中有一个类调用包中的类。当我尝试编译时出现此错误:

Pirate(processing.core.PApplet,java.lang.String,processing.core.PVector,float,float,int,int) is not public in fsg.pvzclone.pirateunits.Pirate; cannot be accessed from outside package
[javac]   fsg.pvzclone.pirateunits.Pirate pirate1 = new fsg.pvzclone.pirateunits.Pirate(this, "Pirate", pinPoint, pWidth, pHeight, 1, 1).displayPirate();

有谁知道为什么我无法访问课程?我将类和构造函数都设置为public,所以我不确定为什么无法访问该类。任何帮助将不胜感激。

构造代码:

package fsg.pvzclone.pirateunits;

import processing.core.*;

public class Pirate {
   public String pirateClass;
    int classId;
    PVector pinPoint;
    float width;
    float height;
    int id;
    PApplet parent;

    public Pirate(processing.core.PApplet _parent, String _pirateClass, PVector _pinPoint,
        float _width, float _height, int _classId, int _id) {
        parent = _parent;
        pirateClass = _pirateClass;
        classId = _classId;
        width = _width;
        height = _height;
        pinPoint = _pinPoint;
        id = _id;
    }

    public void displayPirate() {
        parent.fill(13, 183, 20, 255);
        parent.stroke(7, 59, 9, 255);
        parent.rect(this.pinPoint.x-this.width/2, (float)(this.pinPoint.y-this.height*.75), this.width, this.height);
    }

}

暗号海盗班:

fsg.pvzclone.pirateunits.Pirate pirate1 = new fsg.pvzclone.pirateunits.Pirate(this, "Pirate", pinPoint, pWidth, pHeight, 1, 1).displayPirate();

【问题讨论】:

  • 显示一些代码会有所帮助。错误是说构造函数是 not public.
  • 你能告诉我们构造函数代码吗?
  • 可能是您有多个重载的构造函数,而您正在调用私有的构造函数吗?请检查签名。此外,显示代码会有很大帮助。
  • 如果你还需要什么代码,请告诉我
  • 您是否尝试过清洁并更换新的罐子?

标签: java class permissions package processing


【解决方案1】:

不确定这是您的问题,但这是个问题,评论太长 - 您应该替换;

fsg.pvzclone.pirateunits.Pirate pirate1 = new fsg.pvzclone.pirateunits.Pirate(this, "Pirate", pinPoint, pWidth, pHeight, 1, 1).displayPirate();

与:

fsg.pvzclone.pirateunits.Pirate pirate1 = new fsg.pvzclone.pirateunits.Pirate(this, "Pirate", pinPoint, pWidth, pHeight, 1, 1);
pirate1.displayPirate();

因为displayPirate 什么都不返回,不是海盗。

【讨论】:

    【解决方案2】:

    如果 Pirate 类是如图所示的 1:1,那么我怀疑您在类路径中的某个地方有旧版本。仔细检查旧版本的类路径,包括 .java 和 .class。

    【讨论】:

    • 显然我必须通过菜单选项将库显式添加到项目中,而不是简单地替换项目文件夹中的文件
    【解决方案3】:

    尝试在 Pirate 类中创建公共默认构造函数并尝试将其称为:

    public class Pirate{
     public Pirate () {}
    
      ....
    }
    

    调用代码:

    fsg.pvzclone.pirateunits.Pirate emptyPirate1 =  new fsg.pvzclone.pirateunits.Pirate();
    

    然后检查您是否仍然收到相同的错误消息?

    【讨论】:

    • 我试过了,它给了我一个找不到符号的错误。我添加了默认的公共构造函数并使用了您提供的代码。
    • 你的 jar 在类路径中吗?您的 jar 必须对类路径可见才能使用它。不确定您使用的是什么 IDE,但是在 Eclipse 中,您可以通过右键单击项目并构建属性和库并添加外部 jar 来添加 jar。
    • 这就是问题所在,构造函数必须显式声明! +1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多