2010-07-30 16 views
36

Estoy usando Netbeans. Hice algunas cosas con enlaces y ahora cada vez que inicio mi programa, incluso antes de iniciar el formulario, me da un errorexcepción en el error de inicialización

La excepción en thread main está ocurriendo incluso antes de que el formulario sea aún un objeto inicializado. La forma ni siquiera es un objeto. Cada línea en mi main() causa una excepción. Cosas al azar. No lo entiendo en absoluto.

Aquí está el error.

Exception in thread "main" java.lang.ExceptionInInitializerError 
     at obd2ner.main(obd2ner.java:26) 
Caused by: java.lang.ClassCastException 
     at java.lang.Class.cast(Class.java:2990) 
     at org.jdesktop.beansbinding.Binding.convertForward(Binding.java:1312) 
     at org.jdesktop.beansbinding.Binding.getSourceValueForTarget(Binding.java:844) 
     at org.jdesktop.beansbinding.Binding.refreshUnmanaged(Binding.java:1222) 
     at org.jdesktop.beansbinding.Binding.refresh(Binding.java:1207) 
     at org.jdesktop.beansbinding.AutoBinding.tryRefreshThenSave(AutoBinding.java:162) 
     at org.jdesktop.beansbinding.AutoBinding.bindImpl(AutoBinding.java:199) 
     at org.jdesktop.beansbinding.Binding.bindUnmanaged(Binding.java:959) 
     at org.jdesktop.beansbinding.Binding.bind(Binding.java:944) 
     at org.jdesktop.beansbinding.BindingGroup.bind(BindingGroup.java:143) 
     at OBD2nerForm.initComponents(OBD2nerForm.java:731) 
     at OBD2nerForm.<init>(OBD2nerForm.java:75) 
     at Status.<clinit>(Status.java:41) 
     ... 1 more 
Java Result: 1 

OBD2nerForm línea 731 es bindingGroup.bind(); a veces se equivoca en el paquete();

la excepción de "principal" ni siquiera parece relevante porque se produce tan pronto como se ejecuta el programa y cada vez que comente una línea que pasa a la siguiente

 public void actionPerformed(ActionEvent evt) { 
      jFormattedTextField2ActionPerformed(evt); 
     } 
    }); 

    jLabel8.setText("Data In Que:"); 

    jLabel9.setFont(new Font("DejaVu Sans", 0, 14)); 
    jLabel9.setText("FFFFFFFFFFFFFFFFFFFF"); 

    GroupLayout jPanel5Layout = new GroupLayout(jPanel5); 
    jPanel5.setLayout(jPanel5Layout); 
    jPanel5Layout.setHorizontalGroup(
     jPanel5Layout.createParallelGroup(GroupLayout.LEADING) 
     .add(jPanel5Layout.createSequentialGroup() 
      .add(jPanel5Layout.createParallelGroup(GroupLayout.LEADING) 
       .add(jPanel5Layout.createSequentialGroup() 
        .add(19, 19, 19) 
        .add(jPanel5Layout.createParallelGroup(GroupLayout.TRAILING) 
         .add(jLabel7) 
         .add(jLabel5) 
         .add(jLabel6)) 
        .add(18, 18, 18) 
        .add(jPanel5Layout.createParallelGroup(GroupLayout.LEADING) 
         .add(GroupLayout.TRAILING, jFormattedTextField1, GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE) 
         .add(GroupLayout.TRAILING, jCheckBox1) 
         .add(GroupLayout.TRAILING, jCheckBox11)) 
        .addPreferredGap(LayoutStyle.RELATED) 
        .add(jPanel5Layout.createParallelGroup(GroupLayout.TRAILING) 
         .add(jFormattedTextField2, GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE) 
         .add(jCheckBox12) 
         .add(jCheckBox2)) 
        .addPreferredGap(LayoutStyle.RELATED) 
        .add(jPanel5Layout.createParallelGroup(GroupLayout.TRAILING) 
         .add(jFormattedTextField3, GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE) 
         .add(jCheckBox13) 
         .add(jCheckBox3)) 
        .addPreferredGap(LayoutStyle.RELATED) 
        .add(jPanel5Layout.createParallelGroup(GroupLayout.TRAILING) 
         .add(jFormattedTextField4, GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE) 
         .add(jCheckBox14) 
         .add(jCheckBox4)) 
        .addPreferredGap(LayoutStyle.RELATED) 
        .add(jPanel5Layout.createParallelGroup(GroupLayout.TRAILING) 
         .add(jFormattedTextField5, GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE) 
         .add(jCheckBox15) 
         .add(jCheckBox5)) 
        .addPreferredGap(LayoutStyle.RELATED) 
        .add(jPanel5Layout.createParallelGroup(GroupLayout.TRAILING) 
         .add(jFormattedTextField6, GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE) 
         .add(jCheckBox16) 
         .add(jCheckBox6)) 
        .addPreferredGap(LayoutStyle.RELATED) 
        .add(jPanel5Layout.createParallelGroup(GroupLayout.TRAILING) 
         .add(jFormattedTextField7, GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE) 
         .add(jCheckBox17) 
         .add(jCheckBox7)) 
        .addPreferredGap(LayoutStyle.RELATED) 
        .add(jPanel5Layout.createParallelGroup(GroupLayout.TRAILING) 
         .add(jFormattedTextField8, GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE) 
         .add(jCheckBox18) 
         .add(jCheckBox8)) 
        .addPreferredGap(LayoutStyle.RELATED) 
        .add(jPanel5Layout.createParallelGroup(GroupLayout.LEADING) 
         .add(GroupLayout.TRAILING, jFormattedTextField9, GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE) 
         .add(GroupLayout.TRAILING, jCheckBox19) 
         .add(GroupLayout.TRAILING, jCheckBox9)) 
        .addPreferredGap(LayoutStyle.RELATED) 
        .add(jPanel5Layout.createParallelGroup(GroupLayout.LEADING) 
         .add(jCheckBox20) 
         .add(jCheckBox10) 
         .add(jFormattedTextField10, GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE))) 
       .add(jPanel5Layout.createSequentialGroup() 
        .add(4, 4, 4) 
        .add(jPanel5Layout.createParallelGroup(GroupLayout.LEADING) 
         .add(jPanel5Layout.createSequentialGroup() 
          .add(jLabel8) 
          .addPreferredGap(LayoutStyle.RELATED) 
          .add(jLabel9, GroupLayout.PREFERRED_SIZE, 256, GroupLayout.PREFERRED_SIZE)) 
         .add(jSeparator1, GroupLayout.PREFERRED_SIZE, 474, GroupLayout.PREFERRED_SIZE)))) 
      .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
     .add(GroupLayout.TRAILING, jPanel5Layout.createSequentialGroup() 
      .addContainerGap(346, Short.MAX_VALUE) 
      .add(jToggleButton3, GroupLayout.PREFERRED_SIZE, 132, GroupLayout.PREFERRED_SIZE) 
      .addContainerGap()) 
    ); 
    jPanel5Layout.setVerticalGroup(
     jPanel5Layout.createParallelGroup(GroupLayout.LEADING) 
     .add(jPanel5Layout.createSequentialGroup() 
      .addContainerGap() 
      .add(jPanel5Layout.createParallelGroup(GroupLayout.BASELINE) 
       .add(jLabel5) 
       .add(jFormattedTextField1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) 
       .add(jFormattedTextField2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) 
       .add(jFormattedTextField3, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) 
       .add(jFormattedTextField4, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) 
       .add(jFormattedTextField5, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) 
       .add(jFormattedTextField6, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) 
       .add(jFormattedTextField7, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) 
       .add(jFormattedTextField8, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) 
       .add(jFormattedTextField9, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) 
       .add(jFormattedTextField10, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) 
      .addPreferredGap(LayoutStyle.RELATED) 
      .add(jSeparator1, GroupLayout.PREFERRED_SIZE, 0, GroupLayout.PREFERRED_SIZE) 
      .addPreferredGap(LayoutStyle.RELATED) 
      .add(jPanel5Layout.createParallelGroup(GroupLayout.LEADING) 
       .add(jCheckBox3) 
       .add(jCheckBox1) 
       .add(jCheckBox2) 
       .add(jCheckBox4) 
       .add(jCheckBox5) 
       .add(jCheckBox6) 
       .add(jCheckBox7) 
       .add(jCheckBox8) 
       .add(jCheckBox9) 
       .add(jLabel6) 
       .add(jCheckBox10)) 
      .addPreferredGap(LayoutStyle.RELATED) 
      .add(jPanel5Layout.createParallelGroup(GroupLayout.TRAILING) 
       .add(jPanel5Layout.createParallelGroup(GroupLayout.LEADING) 
        .add(jLabel7) 
        .add(jPanel5Layout.createParallelGroup(GroupLayout.TRAILING) 
         .add(jCheckBox13) 
         .add(jCheckBox12) 
         .add(jCheckBox11) 
         .add(jCheckBox14) 
         .add(jCheckBox15) 
         .add(jCheckBox16) 
         .add(jCheckBox17) 
         .add(jCheckBox18) 
         .add(jCheckBox19))) 
       .add(jCheckBox20)) 
      .addPreferredGap(LayoutStyle.RELATED, 42, Short.MAX_VALUE) 
      .add(jPanel5Layout.createParallelGroup(GroupLayout.BASELINE) 
       .add(jToggleButton3) 
       .add(jLabel8) 
       .add(jLabel9)) 
      .addContainerGap()) 
    ); 

    jTabbedPane1.addTab("tab6", jPanel5); 

    add(jTabbedPane1, BorderLayout.CENTER); 

    bindingGroup.bind(); 

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

por favor ayuda, hago no entiendo. ¿Qué información necesitas de mí?

editar: parece que todo es código que no puedo tocar. Debo añadir que esto comenzó con netbeans agregando alrededor de 200 importaciones inválidas "import jCheckbox1" que eliminé.

Respuesta

80

Obtiene un ExceptionInInitializerError si algo sale mal en el bloque de inicializador estático.

class C 
{ 
    static 
    { 
    // if something does wrong -> ExceptionInInitializerError 
    } 
} 

Como las variables estáticas se inicializan en bloques estáticos, también hay una fuente de estos errores. Un ejemplo:

class C 
{ 
    static int v = D.foo(); 
} 

=>

class C 
{ 
    static int v; 

    static 
    { 
    v = D.foo(); 
    } 
} 

Así que si foo() se vuelve loca, se obtiene una ExceptionInInitializerError.

+2

No entiendo. Parece estar envuelto en un código que no puedo tocar. –

+0

@ Adam - Supongo que te refieres al código 'org.jdesktop.beansbinding. *'. Al menos puede mirar ese código, establecer puntos de interrupción en él, un solo paso, etc. –

4

@Christian Ullenboom 'la explicación es correcta.

Supongo que el código OBD2nerForm que ha publicado es un bloque de inicializador estático y que se ha generado todo. En función de eso y del seguimiento de la pila, parece probable que el código generado se esté tropezando porque haya encontrado algún componente de su formulario que no tiene el tipo que está esperando.

yo haría lo siguiente para tratar y diagnosticar esto:

  • Google para los informes de problemas similares con NetBeans formas generadas.
  • Si está ejecutando una versión anterior de NetBeans, explore las páginas "errores solucionados" para las versiones más recientes. O simplemente actualice intente una versión más nueva de todos modos para ver si eso soluciona el problema.
  • Intenta recortar bits del diseño de formulario hasta que el problema "desaparezca" ... y trata de descubrir cuál es la verdadera causa.
  • Ejecuta la aplicación debajo de un depurador para descubrir qué tipo de elemento (incorrectamente) se emite como qué. Solo saber los nombres de las clases puede ayudar. Y mirando las variables de instancia de los objetos puede revelar más; p.ej. qué componente de forma específica está causando el problema.

Mi sospecha es que la causa principal es una combinación de algo un poco inusual (o incorrecto) con el diseño de su formulario y errores en el generador de formularios NetBeans que no está haciendo frente a su formulario. Si puede resolverlo, una solución alternativa puede revelarse.

+0

¿cómo se dio cuenta de que el problema era el lanzamiento incorrecto? –

+0

Oh ... excepción de elenco de clase. ¡Gracias! –

+0

@Adam: es asombroso lo que puedes averiguar si miras detenidamente la evidencia que ya tienes :-) –

2

Encontré que tenía enlazado jFormattedCheckBox1.foreground a jCheckBox1 [$ {selected}] ... este era el problema. Gracias por tu ayuda.

Parece que un color no se debe poder unir a un booleano. ¿Supongo que los enlaces son una "característica avanzada"?

Encontré el problema eliminando todos los controles, luego ejecutándolos, luego deshaciendo y luego borrando uno a la vez. Cuando encontré el control ofensivo, examiné las propiedades.

8

Espero que esto ayude ...

class SomeClass{ 
    //Code snippet here... 
} 

Fragmento de código 1: Absolutamente bien - Todas las excepciones se manejan

static void m1(){ 
     try{ 
      throw new Exception(); 
     } catch(Exception e){ 
      System.out.println(e); 
     } 
} 
static{ 
     m1(); 
} 

Código comprobado fragmento de código 2: Will no se compile - No Comunicado excepción comprobada

static void m1() throws Exception{ 
     throw new Exception(); 
} 
static{ 
     m1(); 
} 

Fragmento de código 3: OK (ver fragmento de código 1)

static void m1() throws Exception{ 
     throw new Exception(); 
} 
static{ 
     try{m1();} 
     catch(Exception e){ 
      System.out.println(e); 
      //or whatever 
     } 
} 

Fragmento de código 4: Error de compilación, initilalizer debe ser capaz de completar normalmente

static{ 
     throw new RuntimeException(); 
} 

Básicamente se reduce a lo siguiente:

  1. Dentro del bloque estático, cada comprobado excepción debe tener un controlador.
  2. Si se produjera una RuntimeException, estaría envuelta en ExceptionInInitializerError y luego se lanzaría la última.

Esto tiene sentido ya que UNA CLASE DEBERÍA PODER COMPLETAR LA INICIALIZACIÓN NORMALMENTE. Si esto resulta ser un problema, debe clasificarse como un Error (de la cual la recuperación suele ser difícil o imposible) en lugar de una Excepción (que generalmente es recuperable) ...

+0

Re "esto debería estar categorizado como un error", ¿por qué no se desmarca RuntimeException? – Pacerier

Cuestiones relacionadas