ошибки компиляции Java-архива - PullRequest
0 голосов
/ 27 февраля 2012

хорошо, я попробую поиграть с arraylist в java, чтобы поэкспериментировать кое-что, что связано с моим проектом ... так что я придумаю простой код, подобный этому

, имеющий 3 файла ... DataStruc.java, DataStrucHand.java, testcase1.java

DataStruc.java


public class DataStruc {
private String testString;

public DataStruc(String s){
    this.testString = s;
}

public String getTestString() {
    return testString;
}

public void setTestString(String testString) {
    this.testString = testString;
}

public String toString(){
    return String.format("%s",testString);
}
}


DataStrucHand.java

 import java.util.ArrayList;

  public class DataStrucHand {
private ArrayList<DataStruc> ds;

public void addData(String ss){
    ds.add(new DataStruc(ss));
}

public ArrayList<DataStruc> getData(){
    return ds;
}
}


testcase1.java
 import java.util.*; 
 public class testcase1 {
public static void main(String args []){
    DataStrucHand dsh = new DataStrucHand();

    String gdata = "test";

    dsh.addData(gdata);


  }
   }

Я попытался скомпилировать его и с этой ошибкой

 Exception in thread "main" java.lang.NullPointerException
at DataStrucHand.addData(DataStrucHand.java:7)
at testcase1.main(testcase1.java:8)

Могу ли я узнать, что на самом деле не так?я даже не могу добавить данные ... я пытаюсь добавить данные и получить их обратно, создав еще один testcase2.java ... но у меня возникли проблемы с добавлением в массив сейчас ... моя цель - создать временную переменнуюхранилище для хранения конкретной строки, которую можно получить 1 программой, но которая работает с 2 разными классами ..

Ответы [ 5 ]

2 голосов
/ 27 февраля 2012

Вы никогда ничего не назначаете полю ds.

DataStrucHand.java

import java.util.ArrayList;

public class DataStrucHand {
    private ArrayList<DataStruc> ds; //I am null because nothing is ever new'd up here...

    public void addData(String ss){
        ds.add(new DataStruc(ss));
    }

    public ArrayList<DataStruc> getData(){
        return ds;
    }
}

Попробуйте это с этой строкой:

private ArrayList<DataStruc> ds = new ArrayList<DataStruc>();

Или вы можете иметь конструктор, который будет его обновлять, если вы предпочитаете этот метод:

public DataStrucHand() {
     ds = new ArrayList<DataStruc>();
}
0 голосов
/ 27 февраля 2012

Проблема в том, что ваш DataStrucHand класс никогда не инициализирует свое приватное поле ds, поэтому, когда вы пытаетесь вызвать ds.add(...), он терпит неудачу с NullPointerException.

Фактически, путь классавыглядит прямо сейчас, нет никакого способа, которым ds может быть чем-то еще, чем null.

Самый короткий способ исправить это - правильно инициализировать ds:

private final List<DataStruc> ds = new ArrayList<DataStruc>();

Таким образомкаждый экземпляр DataStrucHand создается с ArrayList внутри, а ds никогда не является null.

0 голосов
/ 27 февраля 2012

Вы никогда не инициализировали ds, поэтому при вызове ds.add(new DataStruc(ss)); добавляется ноль конструктора для DataStrucHand, который инициализирует ds, например ds = new ArrayList<DataStruc>();.

0 голосов
/ 27 февраля 2012

Вы не создали экземпляр ArrayList. Напишите это:

public class DataStrucHand {
    private ArrayList<DataStruc> ds = new ArrayList<DataStruc>();

    public void addData(String ss){
       ds.add(new DataStruc(ss));
    }
0 голосов
/ 27 февраля 2012

Вам нужно поместить ArrayList<DataStruc> экземпляр в ds.

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