Обмен данными между 2 классами - PullRequest
1 голос
/ 24 июня 2011

Я должен разделить String[] между двумя классами. Один класс устанавливает массив, а другой получает массив. Я сделал четыре класса. Один содержит массив на уровне суперкласса, а массив доступен в подклассах. И один класс держит main() вот они.

ApplicationDataPool.java

public class ApplicationDataPool extends JFrame {
    String[] thisContact;

    public ApplicationDataPool() {
        super("Update Record");
    }

    public String[] getThisContact() {
        return thisContact;
    }

    public void setThisContact(String[] thisContact) {
        this.thisContact = thisContact;
    }


}

UpdateProcessStepOneFrame.java

public class UpdateProcessStepOneFrame extends ApplicationDataPool {

        public UpdateProcessStepOneFrame() {
            String[] something = { "fname", "lname" };
            setThisContact(something);
            UpdateProcessStepTwoFrame step2 = new UpdateProcessStepTwoFrame();
            step2.setVisible(true);
        }

    }

UpdateProcessStepTwoFrame.java

public class UpdateProcessStepTwoFrame extends ApplicationDataPool{

    public UpdateProcessStepTwoFrame(){
    String[] theContact = getThisContact();
    //Here is the problem        
    //Exception in thread "main" java.lang.NullPointerException
      System.out.println(theContact.length);
    }

}

ПРОБЛЕМА: всякий раз, когда я обращаюсь к массиву в любом месте, Java выдает NullPointerException. Почему это происходит. Как мне исправить это?

Ответы [ 4 ]

3 голосов
/ 24 июня 2011

Ваша thisContact переменная принадлежит экземпляру UpdateProcessStepOneFrame или UpdateProcessStepTwoFrame, который вы создали. Если вы хотите разделить thisContact между всеми экземплярами ApplicationDataPool, вы должны определить его как static. Это означает, что переменная будет принадлежать классу, а не его экземплярам.

protected static String[] thisContact;
1 голос
/ 24 июня 2011

Классы UpdateProcessStepOneFrame и UpdateProcessStepTwoFrame не знают друг о друге, поэтому вам нужно сделать setThisContact(something) в классе UpdateProcessStepTwoFrame, чтобы getThisContact не было нулевым.

0 голосов
/ 24 июня 2011

Первый звонок

  setThisContact(something);

устанавливает наборы массивов для объекта UpdateProcessStepOneFrame (через базовый класс).

Затем, когда вы выполните это:

 UpdateProcessStepTwoFrame step2 = new UpdateProcessStepTwoFrame();

вы создаете новый объект с его собственным отдельным массивом, который никогда не инициализируется и, следовательно, выбрасывает NPE на theContact.length

0 голосов
/ 24 июня 2011

есть два разных класса ... поэтому String [] theContact будет нулевым во втором классе, если вы не установите его ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...