(使用Netbeans 7.0.1)
我一直在定制JTextArea和JTable。我这样做是通过向我的项目添加一个新的Java类,然后声明它扩展了我想要的特定类(在我的例子中,JTextArea或JTable)。
我一直在使用它,将这些新类添加到JDialogs和JInternalFrames没有任何问题。我这样做只需将其拖到我的JDialog或JInternalFrame ......
但是最近,出于某种原因,我开始收到此错误消息“组件无法实例化。请确保它是JavaBeans组件。”
接受旧自定义类的JInternalFrame仍然接受它们。但是,如果我尝试添加新的自定义类,它会向我提供该错误消息,然后,它开始向旧的自定义类显示相同的消息...
真的很奇怪。我将(先前)自定义类的相同代码复制到新类(当然,更改类的名称)。然后我尝试将其添加到我的JInternalFrame中。它给了我错误信息!如果,在此之前,我尝试添加相同的自定义类(使用原始名称),它通常会添加该类....
这很烦人,我无法解决。有人可以帮我吗?
答案 0 :(得分:1)
非常感谢这个答案,但是,如果你想知道这里的原因。
通常这会出现在两个位置:
例如:
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接口项目。那么现在我发生了什么,当然类加载器找不到类,因为库项目需要编译。通过编译来解决这个问题。