No me conecta socket

Buen dia: estoy realizando una aplicacion con sockets con el siguiente codigo en netbeans y tengo una duda..

¿Porque cuando quito la linea de

JOptionPane.showMessageDialog(null,"entre");

en el metodo conexion me marca una excepcion de java.lang.NullPointerException y si se la dejo no me aparece esa excepcion y me conecta como si nada?

package Ser;

import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

/**
 *
 * @author Roberto
 */

public class Servidor extends javax.swing.JFrame {
    public static int contador = 0;
    public static ServerSocket server;
    public static Socket socket;

    public static void conexion() {
        JOptionPane.showMessageDialog(null,"entre");
        try{
                server = new ServerSocket(9000);
                System.out.println("Esperando conexion de aviones" );
                nombreip.setText("" + InetAddress.getLocalHost());
                while(true)
                {
                        socket = server.accept();
                        contador++;
                        System.out.println("nuevo avion entrante");
                        HiloServidor SH = new HiloServidor(socket, contador);
                        SH.start();
                }
        }catch(Exception e){
        System.out.println(e);}  
    }
   
   
    /**
     * Creates new form Servidor
     */

    public Servidor() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        nombreip = new javax.swing.JTextField();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setLayout(null);

        jLabel1.setText("Hola soy un servidor y mi ip es:");
        jPanel1.add(jLabel1);
        jLabel1.setBounds(47, 37, 170, 14);

        nombreip.setText("ip");
        nombreip.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                nombreipActionPerformed(evt);
            }
        });
        jPanel1.add(nombreip);
        nombreip.setBounds(240, 30, 120, 30);

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        jPanel1.add(jScrollPane1);
        jScrollPane1.setBounds(50, 80, 309, 186);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 403, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>                        

    private void nombreipActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:
    }                                        

    /**
     * @param args the command line arguments
     */

    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see <a href="http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html" title="http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html">http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html</a>
         */

        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Servidor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Servidor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Servidor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Servidor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Servidor().setVisible(true);
            }
        });    
        conexion();
    }

    // Variables declaration - do not modify                    
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    public javax.swing.JTextArea jTextArea1;
    private static javax.swing.JTextField nombreip;
    // End of variables declaration                  
}

Un saludo.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

orden de las cosas

Porque el Servidor se crea después de que invocas el método conexion, entonces nombreip todavía no existe. Pero si pones el JOptionPane, el tiempo que pasa en lo cierras el diálogo es suficiente para que ya el Servidor haya sido creado.

Una solución es:

final Servidor servidor = new Servidor();
EventQueue.invokeLater(new Runnable(){
  public void run() { servidor.setVisible(true); }
});
conexion();