【发布时间】:2018-11-25 20:57:19
【问题描述】:
全球理念:我有一个程序可以读取文本文件(编写汇编程序的地方)并解释它。现在我正在尝试使用 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(将存储整个程序),reg 用于寄存器。
【问题讨论】:
-
调用类的静态方法时,不会调用类构造函数。由于静态字段仅在构造函数中初始化(这显示出严重的设计错误),因此在调用静态方法时它不会被初始化。您需要了解静态变量(以及命名约定)。使用线程,这很难正确地做到,对你来说太早了。
-
谢谢@JBNizet 我会考虑这些点:)
-
删除所有内容,即静态的。每个线程都需要自己的变量。你需要用 new Hall_int().start() 启动一个线程,这样你的静态尝试就不起作用了。
标签: java multithreading arraylist constructor