使用Netbeans时,在Java中初始化程序时出现异常错误。

72
我正在使用 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行,执行了bindingGroup.bind();。有时会出现pack();的错误。

main()中的异常似乎并不相关,因为它在程序运行时立即发生,并且每次我注释掉一行代码后,它就会跳到下一行。

        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,我已经删除了。

10个回答

124

如果静态初始化块出现问题,您将会收到一个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。


3
我不理解。它似乎被包裹在我无法触及的代码中。 - Adam Outler
@Adam - 我猜你指的是 org.jdesktop.beansbinding.* 代码。你至少可以查看该代码,设置断点,单步执行等操作。 - Stephen C
1
它不仅在静态块中出现错误时抛出,还可能在初始化静态变量时发生。 - AndiCover
在 ExceptionInInitializerError 发生后,该类就不能再被使用了。请参见 https://www.monperrus.net/martin/exceptionininitializererror-is-unrecoverable - Martin Monperrus

13
希望这能有所帮助...
class SomeClass{
  //Code snippet here...
}

代码片段1:绝对没问题 - 所有检查异常都已处理

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:OK(请参阅代码片段 1)

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

代码片段4:编译错误,初始化程序必须能够正常完成

static{
        throw new RuntimeException();
}

基本上归结为以下几点:

  1. 在静态块内,每个受检异常都必须有处理程序。
  2. 如果发生RuntimeException,则会将其包装在ExceptionInInitializerError中,然后抛出后者。

这是有道理的,因为一个类应该能够正常完成初始化。如果出现问题,这应该被归类为错误(通常很难或不可能恢复)而不是异常(通常是可恢复的)...


关于“这应该被归类为错误”,为什么不使用未检查的RuntimeException? - Pacerier

4

@Christian Ullenboom的解释是正确的。

我猜测你发布的OBD2nerForm代码是一个静态初始化器块,并且所有代码都是生成的。根据这个和堆栈跟踪,似乎生成的代码因为找到了一些不符合其期望类型的表单组件而出现故障。

我建议你尝试以下方法来诊断问题:

  • 在Google上搜索NetBeans生成的表单类似问题的报告。
  • 如果你正在运行旧版本的NetBeans,请扫描更近期的"修复bug"页面。或者直接升级到更新版本,看看是否会解决问题。
  • 尝试从表单设计中删除部分内容,直到问题"消失"...并尽力找出真正的原因。
  • 在调试器下运行应用程序,以确定被(错误)类型转换成什么。只知道类名可能有所帮助。查看对象的实例变量可能会揭示更多信息;例如哪个具体的表单组件导致了问题。

我怀疑根本原因是你的表单设计有点不寻常(或不正确),以及NetBeans表单生成器中的bug无法处理你的表单。如果你能找出问题,可能会发现一种解决方法。


你是如何发现问题是由于不当的类型转换引起的? - Adam Outler
@Adam - 通过仔细观察你已经拥有的证据,你可以发现惊人的事情 :-) - Stephen C

3
我发现我已经将 jFormattedCheckBox1.foreground 绑定到了 jCheckBox1[${selected}] .... 这就是问题所在。感谢您的帮助。
似乎颜色不能绑定到 boolean。 我猜绑定是一个高级功能?
我通过删除所有控件,然后运行,然后撤销,然后逐个删除来找到问题。当我找到有问题的控件时,我检查了属性。

0
如果您正在使用 Mac M1 芯片和 room lib,请尝试以下操作: 在项目级别的 build.gradle 文件中,在 allprojects 中添加以下配置。
allprojects {
repositories {
    // ...
}

// ADD THE FOLLOWING
configurations.all {
    resolutionStrategy {
        force 'org.xerial:sqlite-jdbc:3.34.0'
    }
}

}

参考: https://dev59.com/4FEG5IYBdhLWcg3wR402#70232822


0

0

无论在静态块中出现什么错误或异常,都会抛出此异常。要获取此异常的原因,只需使用 Throwable.getCause() 即可知道出了什么问题。


0

我遇到了同样的错误,原因是使用了较旧版本的Lombok。 请检查并更新您的Lombok版本, Lombok的变更

v1.18.4 - 对于lombok的JDK10/11支持进行了许多改进。


0
如果您正在使用Cucumber框架(自动化测试),以下建议将像箭一样起作用。 关于IO Cucumber的信息Cukes依赖 删除以下依赖项。
<dependency>
    <groupId>info.cukes</groupId>
    <artifactId>cucumber-java</artifactId>
    <version>1.2.5</version>
</dependency>
<dependency>
    <groupId>info.cukes</groupId>
    <artifactId>cucumber-jvm-deps</artifactId>
    <version>1.0.5</version>
    <scope>provided</scope>
</dependency>

添加以下依赖项

<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-java</artifactId>
    <version>7.2.2</version>
</dependency>
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-junit</artifactId>
    <version>7.2.2</version>
    <scope>test</scope>
</dependency>
<dependency>

-1

确保项目没有任何错误。从工作区中删除该项目(将工作区设置为与git文件夹不同的目录),然后重新导入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接