конструктор класса не может быть доступен внешним пакетом - PullRequest
4 голосов
/ 13 августа 2011

, поэтому я не могу найти уже заданный вопрос, который отвечает моей точной проблеме.У меня есть пакет, который я написал в 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();

Ответы [ 3 ]

4 голосов
/ 13 августа 2011

попробуйте создать открытый конструктор по умолчанию в классе Pirate и попытаться вызвать его как:

public class Pirate{
 public Pirate () {}

  ....
}

телефонный код:

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

И проверить, что вы все еще получаете ту же ошибку msg?

3 голосов
/ 13 августа 2011

Не уверен, что это ваша проблема, но это проблема и она слишком длинна для комментария - вы должны заменить;

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ничего не возвращает, не пират.

1 голос
/ 13 августа 2011

Если класс Пирата равен 1: 1, как показано, то я подозреваю, что у вас где-то есть старая версия в classpath. Дважды проверьте путь к классам для старых версий, как .java, так и .class.

...