从文件加载数据的线程

问题描述 投票:0回答:0

我想创建一个线程,从文件中加载数据。我正在考虑使用 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文档但没有得到太多帮助。

java multithreading invoke
© www.soinside.com 2019 - 2024. All rights reserved.