我想创建一个线程,从文件中加载数据。我正在考虑使用 invokeLater() 方法。但我想我在某个地方搞砸了,不知道在哪里。
这是我的话题:
public class LoadBooks extends Thread{
private ArrayList<Book> books;
@Override
public void run() {
try
{
FileInputStream fis = new FileInputStream("SaveBooks.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
books = (ArrayList<Book>) ois.readObject();
fis.close();
ois.close();
}catch(Exception e)
{
}
}
public ArrayList<Book> getBook() {
return books;
}
}
我正在使用这样的线程:
if(e.getSource() == loadBookButton){
LoadBooks loadBooks = new LoadBooks();
loadBooks.start();
EventQueue.invokeLater(() -> books = loadBooks.getBook());
EventQueue.invokeLater(() -> updateUI(books));
}
我认为这应该如何工作: 书籍将从另一个线程的文件中加载。加载书籍时,我将从我的线程中获取它们,然后我将更新我的 GUI。
有什么问题?: GUI 没有更新,因为 ArrayList
books
是空的。所以哪里有问题。我想也许我不完全理解 invokeLater 是如何工作的。我正在查找java文档但没有得到太多帮助。