2015-02-17 4 views
1

У меня есть приложение, в котором я должен указать доступные порты для соединения с Arduino. Я использую RxTx. У меня есть проблема в текущем коде: В моем GUI я получаю все порты как ArrayList из этой строкиСписок всех портов как JComboBox

public ArrayList<String> getPortIdentifiers() { 
     Enumeration portEnum = CommPortIdentifier.getPortIdentifiers(); 
     ArrayList<String> ports = new ArrayList<String>(); 

     while (portEnum.hasMoreElements()) { 
      CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement(); 
       ports.add(currPortId.getName()); 
     } 
      return ports; 
    } 

В моем контроллере я получить этот результат и установить результат в представление

this.view.setListPorts(listPorts); 

В на мой взгляд, я получаю таким образом, ArrayList и установить массив ComboBox

new JComboBox(this.listPorts.toArray()); 
public void setListPorts(ArrayList<String> ports) { 
       this.listPorts = ports; 
      } 

Но я получаю ошибку на этой строке числа

Исключение в нити "АВТ-EventQueue-0" java.lang.NullPointerException

+0

если 'новый JComboBox (this.listPorts.toArray());' является вся строка, то, что не сохраняется в переменной – chancea

+0

Ну, одна вещь, которую я могу видеть, что происходит, что 'ArrayList' не является потокобезопасным, поэтому, возможно, код для добавления в список выполняется таким образом, что он заставляет его думать, что у него есть другой элемент, а затем поток кода, который вы показываете нам, пытается получить доступ к этому элементу, который по-прежнему остается нулевой в памяти, потому что метод 'add' не завершился полностью. – childofsoong

+2

В какой строке возникает ошибка? Нам понадобится больше контекста, чем то, что делает diganose ошибку – MadProgrammer

ответ

1

Вот еще код:

public class CommunicationController implements ActionListener { 
public CommunicationController() throws IOException, TooManyListenersException { 
     // initialize connection here 
     this.communication = new TestComunication(); 
     ArrayList<String> listPorts = this.communication.getPortIdentifiers(); 
     this.view.setListPorts(listPorts); 
} 
} 

...

public class CommunicationView extends JPanel { 
    private JComboBox portsList; 
    private ArrayList<String> listPorts; 

    public CommunicationView() { 
    .... 
    ..... 
this.portsList = new JComboBox(this.listPorts.toArray()); 
} 
public void setListPorts(ArrayList<String> ports) { 
     this.listPorts = ports; 
    } 
} 

.. ...

public class TestComunication { 
    public ArrayList<String> getPortIdentifiers() { 
     Enumeration portEnum = CommPortIdentifier.getPortIdentifiers(); 
     ArrayList<String> ports = new ArrayList<String>(); 

     while (portEnum.hasMoreElements()) { 
      CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement(); 
       ports.add(currPortId.getName()); 
     } 
      return ports; 
    } 
} 

И ошибка enter image description here

Смежные вопросы