【发布时间】:2019-12-05 21:54:41
【问题描述】:
您好,我在显示外部类的列表时遇到问题。我尝试使用 public void show() 方法,但列表为空。我认为问题出在线程上,这可能吗?谁能解释为什么会这样?
public class CollectionsOperation
{
private List<Client> bufferedReaderClientLIst =
Collections.synchronizedList(new ArrayList<Client>());
BufferedReader bf = null;
private static final String fileName = "clients.txt";
public void bufferedReaderCollection()
throws IOException
{
String line;
try {
bf = new BufferedReader(new InputStreamReader(
new FileInputStream(fileName), "UTF-8"));
while ((line = bf.readLine()) != null) {
String[] split = line.split(";");
String nameCompany = split[0].substring(2);
String adress = split[1];
String phoneNumber = split[2];
String emailAdress = split[3];
Client k = new Client(nameCompany, adress, phoneNumber, emailAdress);
bufferedReaderClientLIst.add(k);
}
} catch (IOException e) {
}
}
public void runBufferedReader()
{
Thread t = new Thread(new CreateList());
t.start();
}
public void show()
{
System.out.println(bufferedReaderClientLIst);
}
private class CreateList implements Runnable
{
@Override
public void run()
{
CollectionsOperation o = new CollectionsOperation();
try {
o.bufferedReaderCollection();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
【问题讨论】:
-
你永远不会打电话给
o.show() -
我已经调用了另一个类:public static void main(String[] args) throws IOException { CollectionsOperation k = new CollectionsOperation(); k.runBufferedReader(); k.show();
-
那么您应该更新问题的代码以匹配您尝试运行的代码。就目前而言,它们似乎有所不同。
-
如果您在评论中输入的是您实际使用的,因为
runBufferedReader中的代码在单独的线程中运行,对k.show()的调用可能发生在之前 您的列表已填充。
标签: java multithreading arraylist bufferedreader inner-classes