获取LinkedList中的所有元素,例外



我需要得到链表中的所有元素。我通过在我的缓冲区(CharacterBuffer)中调用get()方法来做到这一点。

但是每次我尝试获取元素时,我都会得到一个nullPointerException。我不知道如何解决这个问题。

public class Reader extends Thread {
    private GUIMutex gui;
    private CharacterBuffer buffer;
    public Reader(GUIMutex gui, CharacterBuffer buffer) {
        this.gui = gui;
        this.buffer = buffer;
    }
    public void run() {
        String data = "test";
        while (true) {
            try {
                System.out.println(buffer.get());
                gui.setReaderText(data + "n");
                Thread.sleep(1500);
            } catch (InterruptedException e) {
            }
        }
    }
}

public class CharacterBuffer {
    private char ch;
    private LinkedList buffer = new LinkedList();
    private boolean filled = true;
    public void put(char ch) {
        buffer.addLast(ch);
        buffer.removeFirst();
    }
    public Object get() throws InterruptedException {
        while (buffer.isEmpty()) {
            wait();
        }
        // return buffer.removeFirst();
        return buffer.getFirst();
    }
}

LinkedList不是线程安全的…并且线程在执行run方法时获得内存的副本…

使用ConcurrentLinkedDeque

查看文档

第一件事你不能在链表中使用char,它只接受包装类型。在你的put方法中,你同时添加和删除字符。链接列表中没有任何值。

最新更新