Java从不同的类调用方法
我正在做一些非常基本的编码,试图从不同的类调用一个方法,但出于某种原因,每当我试图从任何不同的类调用任何方法时,我都会得到一个空指针异常。我想我已经正确地创建了类的实例,但是我不确定。如果有人能向我解释到底出了什么问题,我将不胜感激 下面是进行调用的类:Java从不同的类调用方法,java,class,methods,Java,Class,Methods,我正在做一些非常基本的编码,试图从不同的类调用一个方法,但出于某种原因,每当我试图从任何不同的类调用任何方法时,我都会得到一个空指针异常。我想我已经正确地创建了类的实例,但是我不确定。如果有人能向我解释到底出了什么问题,我将不胜感激 下面是进行调用的类: public class Menu extends JPanel implements ActionListener{ Skeleton skeleton; Board board; public Menu(){ setBack
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”。当您尝试调用
board.boardTest()时,您的代码似乎会抛出NullPointerException(NPE)
因为您是在将Board对象分配给Board变量之前进行调用,因此对空变量进行方法调用
您必须先创建一个Board实例,然后才能尝试使用Board变量Board。i、 e
Board board = new Board();
注1:对于将来类似的问题,您将希望向我们显示异常文本,并在代码中通过注释指出引发异常的行。i、 e
@Override
public void actionPerformed(ActionEvent e) {
board.boardTest(); // **** A NullPOinterException is thrown here ****
}
注2:这个问题不是特定于Swing的,而是一个基本的Java问题——在您首先为引用变量分配一个有效对象之前,您不能使用它。您的代码看起来好像在您尝试调用
board.boardTest()时应该抛出一个NullPointerException(NPE)
因为您是在将Board对象分配给Board变量之前进行调用,因此对空变量进行方法调用
您必须先创建一个Board实例,然后才能尝试使用Board变量Board。i、 e
Board board = new Board();
注1:对于将来类似的问题,您将希望向我们显示异常文本,并在代码中通过注释指出引发异常的行。i、 e
@Override
public void actionPerformed(ActionEvent e) {
board.boardTest(); // **** A NullPOinterException is thrown here ****
}
注2:这个问题不是特定于Swing的,而是一个基本的Java问题——在首次为引用变量分配有效对象之前,您不能使用它。这不是创建类实例的方式。 当您在某个类的某个变量上声明时,必须使用新方法。 如果您不知道,编译器将不知道如何与此相关,因此程序无效,这就是为什么您会得到null异常。 你看,当你编写一个程序并试图启动它时,它首先通过编译器,编译器检查程序是否有效,如果无效,则发出警报。 编译器将代码视为长字符串,并将其划分为标记。 更简单地说,假设关于某个变量的每个声明都是一个令牌,每个关键字也是令牌。变量名是标识符。 因此,编译器搜索令牌,并将这些数据保存在一些符号表中,然后说什么是类型,什么是值。 例如int num=3;int是令牌,num是标识符,3是值,现在编译器将知道为此分配多少内存。 现在在你的情况下,你没有写Board=newboard(); 因此,编译器不知道要分配多少空间,并且没有对某个实例的引用。因此符号表中的值不是declare。 这会导致编译器调用空异常。 请注意,某些类的构造函数的另一个作用是初始化某些类字段。 假设你有一个类点,你希望每次你创建一个新的点,初始的x,y都是零 所以 创建新点时,初始坐标将为(0,0)
这不是创建类实例的方式。 当您在某个类的某个变量上声明时,必须使用新方法。 如果您不知道,编译器将不知道如何与此相关,因此程序无效,这就是为什么您会得到null异常。 你看,当你编写一个程序并试图启动它时,它首先通过编译器,编译器检查程序是否有效,如果无效,则发出警报。 编译器将代码视为长字符串,并将其划分为标记。 更简单地说,假设关于某个变量的每个声明都是一个令牌,每个关键字也是令牌。变量名是标识符。 因此,编译器搜索令牌,并将这些数据保存在一些符号表中,然后说什么是类型,什么是值。 例如int num=3;int是令牌,num是标识符,3是值,现在编译器将知道为此分配多少内存。 现在在你的情况下,你没有写Board=newboard(); 因此,编译器不知道要分配多少空间,并且没有对某个实例的引用。因此符号表中的值不是declare。 这会导致编译器调用空异常。 请注意,某些类的构造函数的另一个作用是初始化某些类字段。 假设你有一个类点,你希望每次你创建一个新的点,初始的x,y都是零 所以 创建新点时,初始坐标将为(0,0)
无论何时调用驻留在其他类中的方法,都必须创建该其他类的对象,然后调用它
线路板=新线路板();代码中缺少每当您调用驻留在某个其他类中的方法时,您必须创建该其他类的对象,然后再调用它。在这里,我看到您尚未创建该对象 线路板=新线路板();代码中缺少Q:“每当我试图从任何不同的类调用任何方法时,我都会得到一个空指针异常”。您是否创建了要调用的类的实例?Q:“每当我尝试从任何不同的类调用任何方法时,都会出现空指针异常。”。您是否创建了要调用的类的实例?