Интер Пакетное общение на Java? - PullRequest
0 голосов
/ 17 октября 2011

У меня есть код, который наполовину генерируется IDE Netbeans при выборе контейнеров и контроллеров.В рамках проекта у меня есть пара пакетов, которые должны работать вместе и иметь возможность видеть переменные и методы друг друга.В одном из пакетов у меня есть элемент JList, который необходимо заполнить, когда JPanel из этого другого пакета получает пользовательский ввод.Однако по какой-то причине эта ссылка невозможна!

ПАКЕТ ЛКМ ------------------------------------------------

//This is the main class initializing the LMBView class
 public class IDAApp extends SingleFrameApplication {

     @Override
     protected void startup() {
        show(new LMBView(this));
    }
 }


 public class LMBView extends FrameView {

     public javax.swing.JList jList_PortalList;

     private void initComponents() {
          jList_PortalList = new javax.swing.JList();
              .
              .
              .
     }

ПАКЕТ LMB.resources ---------------------------------------

 LMB.LMBView.jList_PortalList  // DOES NOT WORK OR LINKS TO THE CALLING OBJECT

Это сообщение об ошибке отображается

 non-static variables jList_PortalList cannot be referenced from a static context

Ответы [ 3 ]

0 голосов
/ 17 октября 2011

с LMB.LMBView.jList_PortalList вы пытаетесь получить доступ к нестатической переменной через статический вызов.Статический вызов - это когда вы ссылаетесь на имя класса, а не на экземпляр класса.

Поэтому наиболее вероятным решением было бы иметь ссылку на объект LMBView и передать этот объект в качестве параметра в jPanel, из которой вы пытаетесь вызвать метод.

0 голосов
/ 17 октября 2011

Это:

LMB.LMBView.jList_PortalList

пытается получить доступ к этой переменной, как если бы она была статической, тогда как на самом деле это переменная instance . Вы можете получить к нему доступ только для конкретного экземпляра , например,

LMB.LMBView view = ...;
JList list = view.jList_PortalList;

Это не имеет ничего общего с пакетами - вам нужно понимать разницу между статическими членами и членами экземпляра. Похоже, что не должен быть статической переменной, и вы должны просто убедиться, что код, который должен получить доступ к представлению, имеет ссылку на соответствующий экземпляр LMBView.

В качестве отдельного вопроса, публичные переменные, как правило, очень плохая идея - поля - это детали реализации; Вы должны определить API для своего класса с точки зрения конструкторов и методов.

0 голосов
/ 17 октября 2011

Чтобы получить доступ к нестатическому атрибуту, вам нужна ссылка на объект LMBView. С другой стороны, вы можете объявить атрибут как статический (но это не лучшая практика)

public static javax.swing.JList jList_PortalList;

Если вы хотите получить доступ к атрибуту по ссылке, вы должны сделать следующее:

// In the main class
public static void main (String args []) {
    LMBView lmb = new  LMBView();
    //Code for show th JFrame
    AnotherClass aclass = new AnotherClass();
    aclass.setLMBView(lmb);
    // Other code
}

В вашем AnotherClass (может быть в любой упаковке):

public class AnotherClass {
    LMBView lmb;

    public void setLMBView(LMBView lmb) {
        this.lmb = lmb;
    }

    //Now for get the value in some method
    public void doStuff() {
        lmb.jList_PortalList.getWherever(); // Replace getWherever with a valid method
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...