在构造函数中创建新的ArrayList实例

时间:2018-11-25 20:57:19

标签: java multithreading arraylist constructor

全局思想:我有一个程序,该程序读取一个文本文件(在其中编写了汇编程序)并对其进行解释。现在,我正在尝试使用Java多线程进行开发,以便程序可以同时读取和解释不同的文本文件。

问题:我对名为“ Hall_int”的类进行了构造,在其中我尝试初始化所需的所有内容,因为每个新线程都必须具有它自己的新变量和ArrayList,但是不幸的是,当我尝试添加时,ArrayList给了我NullpointerExepction东西。 这是代码:

public class Hall_int extends Thread {
    public static ArrayList<String> ProgrammSpeicher;
    public static Float[]reg;
    public static Float accu;
    public static Integer pc;
    public static String line;

    Hall_int() {
        ProgrammSpeicher  = new ArrayList();
        reg = new Float[20] ;
        accu = 0.0f ;
        pc = 0 ;
        line = "";
    }
    ...

    public static void readFile(File f) throws FileNotFoundException, IOException {
        FileReader fr = new FileReader(f);
        BufferedReader br = new BufferedReader(fr);
        while((line = br.readLine()) != null) {
            ProgrammSpeicher.add(line);
        }
        br.close();
        fr.close();
    }
}

ProrammSpeicher表示Programmemory(将存储整个programm),而reg用于寄存器。

1 个答案:

答案 0 :(得分:0)

您的Arraylist是静态的。 每次调用ProgrammSpeicher时,都会返回Hall_int.ProgrammSpeicher,它甚至没有初始化,即返回空值。 另外,如果希望每个线程都有自己的具有不同值的列表,最好不要将列表设为静态。 列表中一个线程所做的更改将在另一个线程中看到。

public class test1 {
    public static void main(String [] args){
        System.out.println(test.name);
        System.out.println(test.arr);

        test obj = new test();
        System.out.println(test.name);
        System.out.println(test.arr);

        System.out.println(obj.name);
        System.out.println(obj.arr);
    }
}

import java.util.ArrayList;

public class test {

    public static String name;
    public static ArrayList<Integer> arr;

    public test() {
        this.name="Satyam";
        this.arr= new ArrayList<>();
    }
}

运行test1.java的输出

null
null
Satyam
[]
Satyam
[]