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



全局思想:我有一个程序,它读取文本文件(编写汇编程序的地方(并解释它。现在我正在尝试使用java多线程开发它,这样程序就可以同时读取和解释不同的文本文件。

问题是:我为名为"Hall_int"的类做了一个构造函数,在那里我试图初始化所需的一切,因为每个新线程都必须有自己的新变量和ArrayList,但不幸的是,现在当我试图向ArrayList添加一些东西时,ArrayList会给我一个NullpointerExeption。这是代码:

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(整个程序将存储在其中(,reg表示寄存器。

您的Arraylist是静态的。每次调用ProgrammSpeecher时,都会返回Hall_int.ProgrammSpee彻,它甚至没有初始化,即返回一个空值。此外,如果您希望每个线程都有自己的具有不同值的列表,最好不要将列表设置为静态。列表中一个线程所做的更改将被另一个线程看到。
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
[]

最新更新