2011-10-17 4 views
0

J'ai un code qui est à moitié généré par Netbeans IDE en sélectionnant les conteneurs et les contrôleurs. Au sein du projet, j'ai quelques paquets qui devraient fonctionner ensemble et être capables de voir les variables et les méthodes de l'autre. Dans l'un des paquets, j'ai un élément JList qui doit être rempli lorsque le JPanel de cet autre paquet reçoit l'entrée de l'utilisateur. Cependant pour quelque raison ce lien n'est pas possible!Communication Inter Package en Java?

PACKAGE LMB -------------------------------------------- ----

//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 dE L'EMBALLAGE ----------------------------------- ----

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

Ceci est le message d'erreur apparaît

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

Répondre

0

pour accéder à un attribut non statique, vous avez besoin d'une référence d'objet LMBView. D'un autre côté, vous pouvez déclarer l'attribut statique (mais ce n'est pas une meilleure pratique)

public static javax.swing.JList jList_PortalList; 

Si vous souhaitez accéder à l'attribut Trough une référence que vous faites quelque chose comme mus suit:

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

dans votre AnotherClass (peut être dans un paquet):

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 
    } 
} 
+0

Mais ceci est une zone générée automatiquement dans NetBeans et ne me permet pas de le changer. – Sam

+0

Et jList_PortalList est déjà initialisé dans le package LMB. Ce ne serait même pas un appel statique pour autant que je sache! – Sam

+0

N'existe-t-il pas un moyen d'accéder à l'instance LMBView par l'importation ou par tout autre moyen ??! Je dois récupérer l'instance déjà instanciée de LMBView et pouvoir mettre à jour ses paramètres! – Sam

0

avec LMB.LMBView.jList_PortalList vous essayez d'accéder à une variable non statique par un appel statique. Un appel statique est lorsque vous référencez le nom de la classe et non une instance de la classe. Par conséquent, la solution la plus plausible serait d'avoir une référence de l'objet LMBView et de passer cet objet en tant que paramètre au jPanel à partir duquel vous essayez d'appeler la méthode.

0

Ce:

LMB.LMBView.jList_PortalList 

tente d'accéder à cette variable comme si elle était statique, quand il est en fait une variable d'instance . Vous ne pouvez y accéder que pour une instance particulière, par exemple.

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

Cela n'a rien à voir avec les packages - vous devez comprendre la différence entre les membres statiques et les instances. Il semble que ce ne devrait pas être une variable statique, et vous devriez juste vous assurer que le code qui doit accéder à la vue a une référence à l'instance pertinente de LMBView. En règle générale, les variables publiques sont généralement une très mauvaise idée - les champs sont un détail d'implémentation; vous devriez décider de l'API pour votre classe en termes de constructeurs et de méthodes.

+0

Comme vous pouvez le voir, jList_PortalList est déjà instancié dans la classe LMBView et est exécuté dans le cadre de l'application principale. Maintenant, mon défi est de savoir comment serait-il possible de récupérer l'instance de cet objet jList_PortalList déjà en cours et de le mettre à jour avec des éléments acquis à partir de cette autre classe située sous le paquet LMB.resources?! – Sam

+0

@Sam: J'ai répondu à votre commentaire dans une autre réponse. C'est l'instance de 'LMBView' à laquelle vous devez avoir accès - tout ce qui crée le' LMBView' doit être disponible pour tout ce qui l'intéresse. Nous ne pouvons pas vraiment vous aider avec cela car nous ne savons pas le reste de la façon dont votre application se bloque ensemble - mais comprendre cela (le fait que vous ne pouvez pas obtenir des membres d'instance sans une instance à laquelle faire référence) est une partie fondamentale de travailler avec Java. Ne prenez pas de raccourcis avec ceci - déterminez comment les informations devraient circuler dans votre système. –