2010-07-30 2 views
36

Я использую Netbeans. Я сделал некоторые вещи с привязками, и теперь, когда я запускаю свою программу, прежде чем она даже инициализирует форму, это дает мне ошибку.Исключение в ошибке инициализатора

Исключение в основной теме потока - это до тех пор, пока форма еще не является объектом-инициализацией. Форма еще не является объектом. Каждая строка в моей main() вызывает исключение. Случайная вещь. Я этого не понимаю.

Произошла ошибка.

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 линия 731 обязательнаGroup.bind(); иногда ошибки на упаковке();

исключение в «основной» даже не кажется важной, так как она происходит, как только программа запускается и каждый раз, когда я закомментировать строку перепрыгнул к следующему

 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>  

пожалуйста, помогите, я сделать не понимать. Какая вам информация?

редактирование: все, что угодно, код, который я не могу трогать. Я должен сказать, что это началось с того, что netbeans добавили около 200 недопустимых импортных «import jCheckbox1», которые я удалил.

ответ

80

Вы получаете ExceptionInInitializerError, если что-то пойдет не так в блоке статического инициализатора.

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

Поскольку статические переменные инициализируются в статических блоках, также есть источник этих ошибок. Пример:

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

=>

class C 
{ 
    static int v; 

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

Так что, если Foo() идет дикий, вы получите ExceptionInInitializerError.

+2

Не понимаю. Кажется, это завернуто в код, который я не могу коснуться. –

+0

@Adam - Я предполагаю, что вы имеете в виду код org.jdesktop.beansbinding. *. Вы можете хотя бы посмотреть на этот код, установить в нем контрольные точки, один шаг и т. Д. –

4

@Christian Ullenboom 'пояснение правильное.

Я предполагаю, что код OBD2nerForm, который вы отправили, представляет собой статический блок инициализатора и что он все сгенерирован. Исходя из этого и на трассировке стека, кажется вероятным, что сгенерированный код отключается, потому что он нашел какой-то компонент вашей формы, который не имеет того типа, который он ожидает.

Я хотел бы сделать следующее, чтобы попытаться диагностировать это:

  • Google для сообщений о подобных проблемах с NetBeans сгенерированных форм.
  • Если вы используете старую версию NetBeans, просмотрите страницы с исправленными ошибками для более поздних выпусков. Или просто обновите попытку более новой версии, чтобы проверить, устраняет ли это проблему.
  • Попробуйте вырезать биты из формы, пока проблема не исчезнет ... и попытайтесь выяснить, какова настоящая причина.
  • Запустите приложение под отладчиком, чтобы выяснить, что происходит (некорректно). Просто знание имен классов может помочь. И, глядя на переменные экземпляра объектов, можно обнаружить больше; например какой конкретный компонент формы вызывает проблему.

Мое подозрение, что основная причина - это сочетание чего-то необычного (или неправильного) с вашим дизайном формы и ошибок в генераторе формы NetBeans, который не справляется с вашей формой. Если вы можете это понять, обходной путь может проявиться.

+0

как вы выяснили, что проблема была неправильной литой? –

+0

Oh ... класс исключение. благодаря! –

+0

@Adam - удивительно, что вы можете понять, тщательно изучив доказательства, которые у вас уже есть :-) –

2

Я обнаружил, что связал jFormattedCheckBox1.foreground с jCheckBox1 [$ {selected}] .... это была проблема. Спасибо за помощь.

Кажется, что цвет не должен быть связан с булевым. Наверное, привязки - это «предварительная функция»?

Я нашел проблему, удалив все элементы управления, затем выполнив, затем отменив, а затем удалив один за раз. Когда я обнаружил оскорбительный контроль, я изучил свойства.

8

Надеюсь, что это помогает ...

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

Фрагмент кода 1: Абсолютно OK - все отмеченные исключения, обрабатываемые

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

Фрагмент кода 2: Будет не компилирует - сообщается проверил исключение

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

Фрагмент кода 3: ОК (см. Фрагмент кода 1)

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

Фрагмент кода 4: Ошибка компиляции, initilalizer должны быть в состоянии завершить нормально

static{ 
     throw new RuntimeException(); 
} 

В основном это сводится к следующему:

  1. Внутри статического блока, каждый проверил исключения должны иметь обработчик.
  2. Если возникло исключение RuntimeException, оно будет завернуто в ExceptionInInitializerError, а затем будет выброшено последнее.

Это имеет смысл, поскольку КЛАСС ДОЛЖЕН БЫТЬ ЗАВЕРШЕНА ИНИЦИАЛИЗАЦИЮ НОРМАЛЬНО. Если это будет проблемой, это должно быть категоризировано как ошибка (из которой восстановление обычно затруднено или невозможно), а не исключение (которое обычно восстанавливается) ...

+0

Re "это должно быть категоризировано как ошибка", почему не исключено исключение RuntimeException? – Pacerier

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