Netbeans 7.0.1中的“组件无法实例化”

时间:2011-09-02 21:06:10

标签: java swing netbeans

编辑:对不起,我刚开始用Java编程。事实证明,超出范围的数组访问是一个问题......我习惯于将有关此类事情的消息错误地自动...

(使用Netbeans 7.0.1)

我一直在定制JTextArea和JTable。我这样做是通过向我的项目添加一个新的Java类,然后声明它扩展了我想要的特定类(在我的例子中,JTextArea或JTable)。

我一直在使用它,将这些新类添加到JDialogs和JInternalFrames没有任何问题。我这样做只需将其拖到我的JDialog或JInternalFrame ......

但是最近,出于某种原因,我开始收到此错误消息“组件无法实例化。请确保它是JavaBeans组件。”

接受旧自定义类的JInternalFrame仍然接受它们。但是,如果我尝试添加新的自定义类,它会向我提供该错误消息,然后,它开始向旧的自定义类显示相同的消息...

真的很奇怪。我将(先前)自定义类的相同代码复制到新类(当然,更改类的名称)。然后我尝试将其添加到我的JInternalFrame中。它给了我错误信息!如果,在此之前,我尝试添加相同的自定义类(使用原始名称),它通常会添加该类....

这很烦人,我无法解决。有人可以帮我吗?

3 个答案:

答案 0 :(得分:1)

非常感谢这个答案,但是,如果你想知道这里的原因。

通常这会出现在两个位置:

  1. 您组件上的重写方法。
  2. 组件上的常规方法。
  3. 例如:

    package UI.Components;
    
    public class LabelComponent extends javax.swing.JLabel {
    
        private javax.swing.JLabel label;
    
        public TextFieldComponent() {
            label = new javax.swing.JLabel(_label);
            add(label);
        }
    
        @Override
        public void setText(String text) {
            label.setText(text);
        }
    }
    

    方法setText(String text)在supper类构造函数中调用,然后在这个方法上使用的(label)变量的情况下调用重写的new方法仍然没有被初始化,所以{{}将会被甩掉。

    溶液:

    1)java.lang.NullPointerException ... try

    catch

    2)检查:

    在声明

    上使用null初始化
    @Override
    public void setText(String text) {
        try {
            label.setText(text);
        } catch (Exception e) {
        }
    }
    

    然后检查方法

    private javax.swing.JLabel label = null;
    

    3)在声明上使用初始化:

    @Override
    public void setText(String text) {
        if(label != null)
            label.setText(text);
    }
    

    然后在构造函数中使用setText方法

    private javax.swing.JLabel label = label = new javax.swing.JLabel();
    

    请注意:

    在原因(2)组件的常规方法的情况下,它与(1)相同,但您可以在初始化变量之前调用该方法,或者在调用方法之前将null赋值给变量,依此类推它可以通过相同的方式解决。

答案 1 :(得分:0)

我也遇到了同样的问题,在网上进行了一些搜索之后,我找到了解决这个问题的方法。我对这个问题发生的原因和方式没有深刻的理解,但我可以与您分享我找到的解决方案。

当您收到错误消息时,转到菜单View - > IDE Log,或者您可以从windows_user_Home \ .netbeans \ 7.0 \ var \ log

打开日志

在该日志中,您必须找到您收到的错误消息,例如

INFO [org.netbeans.modules.form.BeanSupport]: Cannot create default instance of: test.Application1
java.lang.NullPointerException
    at test.Application1.initLabel(Application1.java:906)

所以问题出在你的.java文件的第906行。打开该文件并注释这些行,然后您就可以解决问题。

您可以将组件添加到Form或jInternalFrame或...

添加组件后,您可以再次取消注释这些行。只需清理并构建您的项目。

希望这会有所帮助..

古德勒克

reachSDK

答案 2 :(得分:0)

我遇到了类似的问题,但是在不同的背景下。

我有两个独立的项目,一个是swing构建的用户界面,另一个是作为类库构建的项目。

我在类库中添加了一个类,然后转到用户界面,并将这个新添加的类从库中实现为现有自定义JFrame形状的swing接口项目。那么现在我发生了什么,当然类加载器找不到类,因为库项目需要编译。通过编译来解决这个问题。