全局思想:我有一个程序,该程序读取一个文本文件(在其中编写了汇编程序)并对其进行解释。现在,我正在尝试使用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用于寄存器。
答案 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
[]