Java SwingWorker NullPointerException при вызове model.reload () - PullRequest
0 голосов
/ 20 июля 2011

Я пытаюсь добавить дочерние узлы в JTree внутри потока SwingWorker.Затем перезагрузите модель, чтобы обновить пользовательский интерфейс.Когда я перезагружаю JTree DefaultModel, он генерирует исключение NullPointerException.Есть ли способ это исправить?или я должен найти другой подход?

Вот что происходит.

SwingWorker worker = new SwingWorker<String, Void>()
{

   @Override public String doInBackground()
   {
        TimeUnit.SECONDS.sleep(2);
        return "hello";
   }

   @Override public void done()
   {
        String response = "";
        try {
            response = this.get();
        } catch (InterruptedException e) {
            System.out.println(e);
        } catch (ExecutionException e) {
            System.out.println(e);
        }

        String device = "hello";
        ArrayList<String> devices = new ArrayList<String>();
        devices.add(device);
        DefaultMutableTreeNode root = new DefaultMutableTreeNode("Devices");
        DefaultTreeModel model = (DefaultTreeModel)this.deviceTree.getModel();

    for (String device : devices)
    {
        DefaultMutableTreeNode child = new DefaultMutableTreeNode(device);
        root.add(child);
        model.insertNodeInto(child, root, 0);
    }

        // Null pointer exception!!!
        model.reload();
    }
};
worker.execute();

1 Ответ

0 голосов
/ 20 июля 2011

1) переместить все переменные для

DefaultMutableTreeNode root = new DefaultMutableTreeNode("Devices");
DefaultTreeModel model = (DefaultTreeModel)this.deviceTree.getModel();

снаружи SwingWorker класс

не обновлять root и model, на самом деле ничего из этих Object,

DefaultMutableTreeNode child = new DefaultMutableTreeNode(device);
root.add(child);
model.insertNodeInto(child, root, 0);

только объявляет ArrayList<String> devices = new ArrayList<String>(); и возвращает это значение как Object, если SwingWorkers заканчивается (или считается как закрытая переменная), если SwingWokres заканчивается, тогда создают все Object

for (String device : devices) {
    DefaultMutableTreeNode child = new DefaultMutableTreeNode(device);
    root.add(child);
    model.insertNodeInto(child, root, 0);
}

другие опции объявляются SwingWorkers # publish () ; но зачем это нужно в этом случае

РЕДАКТИРОВАТЬ: на левой (верхней) стороне на этом экране button labeled with SwingWorker, читать все 103 темы

...