java - 在构造函数中创建新的 ArrayLists 实例
问题描述
全球理念:我有一个程序可以读取文本文件(编写汇编程序的地方)并解释它。现在我正在尝试使用 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 用于寄存器。
解决方案
你的 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
[]
推荐阅读
- node.js - 如何允许用户使用 OAuth 登录
- mysql - SO Prisma GraphQL 错误:哎呀。看起来像内部服务器错误
- html - 如何将此按钮水平居中到我的页面?
- typescript - 如何使用 mocha/chai 在 NestJS API 上抛出“app.address()”错误来修复测试?
- spring-cloud-contract - 在单独的 gradle 任务中运行 Spring 云合同测试
- selenium - 我无法使用硒单击下拉元素
- java - 如何提高在 MNIST 上训练的模型的数字识别?
- algorithm - 在递归/缩进树数据结构之间转换
- c - 一些字符的格式化问题,但其他字符很好
- swift - imageProvider 不在 Graphic Complication Watch OS5 中显示图像