Java从不同的类调用方法

时间:2013-07-21 20:49:46

标签: java class methods

我正在做一些非常基本的编码,试图从不同的类调用一个方法,但由于某种原因,每当我尝试从任何不同的类调用任何方法时,我都会得到一个空指针异常。我想我已经正确地创建了类的实例,但我不确定。如果有人能解释我的错误,我会很感激。

这是进行调用的类:

 public class Menu extends JPanel implements ActionListener{

Skeleton skeleton;
Board board;

public Menu(){

    setBackground(Color.BLACK);

    JButton button = new JButton("hello");  
    button.addActionListener(this);
    this.add(button);
}

public JPanel getPanel(){
    return this;
}

@Override
public void actionPerformed(ActionEvent e) {
    board.boardTest();
}
}

这是包含方法

的类
public class Board extends JPanel{

public Board(){
setBackground(Color.WHITE);
}

public JPanel getPanel(){
    return this;
}

public void boardTest(){
    System.out.print("hello");
}
}

正如您所看到的,每当用户点击按钮时,它都会打印出'hello'。

3 个答案:

答案 0 :(得分:8)

当您尝试调用board.boardTest()时,您的代码看起来应该抛出NullPointerException(NPE),因为您在将Board对象分配给board变量之前进行调用并因此调用方法一个null变量。

您必须先创建一个Board实例,然后才能尝试使用Board变量board。即,

Board board = new Board();

注意1:对于将来的类似问题,您需要向我们展示异常文本,并在代码中通过注释指示哪些行抛出异常。即,

@Override
public void actionPerformed(ActionEvent e) {
    board.boardTest();  // **** A NullPOinterException is thrown here ****
}

注意2:这个问题不是Swing特定的,而是一个基本的Java问题 - 在第一次为它指定一个有效的对象之前,不能使用引用变量。

答案 1 :(得分:0)

这不是您创建类实例的方式。 当您在某个类的某个变量上声明时,必须使用新方法。 如果你不这样做,编译器将不知道如何与此相关,因此程序无效,这就是你得到null异常的原因。 你看,当你编写一个程序并尝试启动它时,它首先通过编译器,编译器会检查程序是否有效,如果没有,则会发出警报。 编译器将代码视为长字符串并将其划分为标记。 更简单的是,假设关于某个变量的每个声明都是一个标记,每个关键字也都是标记。变量名称是标识符。 因此,编译器搜索令牌并将数据保存在某些符号表中,并说明什么是类型和什么是值。 例如int num = 3; int是token,num是标识符,3是值,现在编译器将知道要为此分配多少内存。 现在在你的情况下你没有写Board Board = new Board(); 因此,编译器不知道要分配多少空间,也没有对某个实例的引用。所以符号表中的值不是声明的。 这会导致编译器对null异常进行allet。 请注意,某个类的构造函数的另一个角色是初始化某些类字段。 假设您有Point类,并且您希望每次创建新点时,初始x,y将为零。

所以

Class Point{
int x,y;
 Point(){
    x=y=0;
}

当你创建一个新点时,初始坐标将为(0,0)。

Point p = new Point();

答案 2 :(得分:0)

每当你调用一个驻留在其他类中的方法时,你必须创建另一个类的对象然后调用它。我看到你没有创建该对象。

董事会董事会=新董事会();代码中缺少