[Resolvido] Erro ao listar JCombobox em ordem alfabética

Boa tarde galera!

É o seguinte, preciso montar um JCombobox a partir do banco de dados em ordem alfabética. Pesquisei e vi que primeiro temos que organizar em ordem alfabética numa lista e depois montar o combobox, então fiz o código da seguinte maneira:

Construtor tela do combobox

    public AvaliacaoAnamnese() {
        initComponents();
        Aluno a = new Aluno();
        montaCombobox(a);
    }

Método para montar o combobox

public void montaCombobox(Aluno a){
        DefaultComboBoxModel modelo = new DefaultComboBoxModel();
        modelo.addElement("Selecione um aluno...");
        SortedSet<String> lista =  new TreeSet<String>();
        String sql ="Select nome from aluno";
        try {
            PreparedStatement ps = Principal.conexao.getConexao().prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
           
            while(rs.next()){
                a.setNome(rs.getString("NOME"));
                lista.add(a.getNome());
               
              }
            ps.close();
            rs.close();

            for(String x: lista){
                modelo.addElement(x);
            }
        } catch (SQLException ex) {
            Logger.getLogger(AvaliacaoAnamnese.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null,"Erro ao listar os alunos!");
        }

        cbxAluno.setModel(modelo);

    }

Quando eu listo do BD direto no combobox funciona, porém não fica na ordem alfabética. Mas quando eu coloco os nomes na lista e depois monto o combobox parece que a lista está ficando nula. O erro é o seguinte:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at java.util.TreeMap.put(TreeMap.java:541)
        at java.util.TreeSet.add(TreeSet.java:238)
        at gui.AvaliacaoAnamnese.montaCombobox(AvaliacaoAnamnese.java:54)
        at gui.AvaliacaoAnamnese.<init>(AvaliacaoAnamnese.java:41)
        at gui.Principal.jMenuItem2ActionPerformed(Principal.java:141)
        at gui.Principal.access$300(Principal.java:23)
        at gui.Principal$4.actionPerformed(Principal.java:104)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
        at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1223)
        at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1264)
        at java.awt.Component.processMouseEvent(Component.java:6263)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6028)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Alguém sabe me dizer aonde está o problema?

Obrigado,

abraços

Olá,

Possivelmente você está adicionando um valor nulo na tua lista, o que é um problema para um TreeSet já que ele usa métodos dos objetos adicionados para manter-se ordenado. Confira se você não está recebendo um valor nulo do banco.

Uma sugestão:

Você pode receber os valores do banco já ordenados. Para isso basta adicionar um ORDER BY na sua consulta. Por exemplo:

SELECT nome FROM aluno ORDER BY nome

Falou!

[quote=wagnerfrancisco]Olá,

Possivelmente você está adicionando um valor nulo na tua lista, o que é um problema para um TreeSet já que ele usa métodos dos objetos adicionados para manter-se ordenado. Confira se você não está recebendo um valor nulo do banco.

Uma sugestão:

Você pode receber os valores do banco já ordenados. Para isso basta adicionar um ORDER BY na sua consulta. Por exemplo:

SELECT nome FROM aluno ORDER BY nome

Falou![/quote]

Nossa…como não pensei em fazer o order by logo na consulta…hehehe. :? (Principiante já viu como é né?)

Sobre o valor nulo, não sei o porque estava adicionando nulo, porque o set estava funcionando corretamente…o problema está no lista.add e não tenho idéia do que seja…o a.getNome funciona corretamente, o lista.add adicionando um texto diretamente também, os dois que não querem funcionar juntos, hehe.

Mas de qualquer forma o ORDER BY resolveu meu problema…valeu!!! :smiley: