java 对象数组做方法参数报空指针错误
对象数组C[]在类A中定义并初始化。类A中调用类B的构造方法B(C[])并传递C[]为参数,则在类B的构造方法中调用对象C[i]时报空指针错误,求解决办法。类A相关代码简...
对象数组C[ ]在类A中定义并初始化。类A中调用类B的构造方法B(C[ ])并传递C[]为参数,则在类B的构造方法中调用对象C[i ]时报空指针错误,求解决办法。
类A相关代码简化如下:
public class A
extends JPanel{
private C[] c;
public A(String title){
this.setLayout(new GridBagLayout());
this.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
c= new C[10];
for(int i=0; i<10; i++){
c[i] = new C();
c[i].addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{/*......*/
}
});
}
B b= new B(c);
}
}
请高手们帮看看。。还需要什么。。。 展开
类A相关代码简化如下:
public class A
extends JPanel{
private C[] c;
public A(String title){
this.setLayout(new GridBagLayout());
this.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
c= new C[10];
for(int i=0; i<10; i++){
c[i] = new C();
c[i].addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{/*......*/
}
});
}
B b= new B(c);
}
}
请高手们帮看看。。还需要什么。。。 展开
展开全部
思路不错,把 B b= new B(c); 放在 for循环外面就可以了。
我根据你的例子,补充完整了,看看吧
package frame;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JPanel;
public class A extends JPanel {
private C[] c;
public A() {
this.setLayout(new GridBagLayout());
this.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
c = new C[10];
for (int i = 0; i < 10; i++) {
c[i] = new C(i + "");
c[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {/* ...... */
System.out.println(e.getActionCommand());
}
});
add(c[i]);
}
B b = new B(c);
b.getC();
}
}
class B {
private C[] c;
public B(C[] c){
this.c = c;
}
public void getC(){
for(int i = 0; i < c.length; i++){
System.out.print(c[i].getActionCommand());
}
System.out.println(c.length);
}
}
class C extends JButton{
public C(String i){
super(i);
}
}
我根据你的例子,补充完整了,看看吧
package frame;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JPanel;
public class A extends JPanel {
private C[] c;
public A() {
this.setLayout(new GridBagLayout());
this.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
c = new C[10];
for (int i = 0; i < 10; i++) {
c[i] = new C(i + "");
c[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {/* ...... */
System.out.println(e.getActionCommand());
}
});
add(c[i]);
}
B b = new B(c);
b.getC();
}
}
class B {
private C[] c;
public B(C[] c){
this.c = c;
}
public void getC(){
for(int i = 0; i < c.length; i++){
System.out.print(c[i].getActionCommand());
}
System.out.println(c.length);
}
}
class C extends JButton{
public C(String i){
super(i);
}
}
展开全部
c[i] = new C();
是创建了一个对象,但是对象没有值,你可能在B中用空值做操作了
是创建了一个对象,但是对象没有值,你可能在B中用空值做操作了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你在A 里初始化代码这种形式吗。 C[] c = new C[n];
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请把A类的代码贴下出来
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
那肯定你c[]没初始化好啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看描述就知道没初始化,c[] = new 类型[长度]
追问
求问怎么“看描述就知道没初始化”?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询