我是Java初学者。我想在运行的Java线程对象中调用一个方法。它总是引发以下异常:
线程“AWT-EventQueue-0”java中出现异常。lang.NullPointerException:无法调用“Graphic\u handler.next()”,因为“this.this$0.grap”为null
public class Graphic_handler extends Thread {
int off = 0;
int columns = 7;
int rows = 7;
public Graphic_handler(Instagram_bot bot) {
}
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (Exception e) {
//TODO: handle exception
}
set_time();
}
}
private void set_time() {
Date date = Calendar.getInstance().getTime();
DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy hh:mm:ss");
String strDate = dateFormat.format(date);
bot.date.setText(strDate);
}
public void change_center(int offset) {
}
public synchronized void next() {
off++;
notify();
}
public synchronized void last() {
off--;
notify();
}
}
(代码已简化)
下面是我调用该方法的代码部分:
ActionListener right_ear = new ActionListener() {
public void actionPerformed(ActionEvent e) {
grap.next();
};
};
ActionListener left_ear = new ActionListener() {
public void actionPerformed(ActionEvent e) {
grap.last();
};
};
public static void main(String[] args) {
Graphic_handler grap = new Graphic_handler(bot);
grap.start();
}
我试图在这里调用方法Next()和last()。
发生的事情是您有一个隐藏实例变量的局部变量。
class SomeClass {
Graphic_handler grap;
public static void main(String[] args) {
Graphic_handler grap = new Graphic_handler(bot);
^^^ this *hides* the other grap
grap.start();
}
要解决这个问题,只需删除方法中grap
前面的声明。
class SomeClass {
Graphic_handler grap;
public static void main(String[] args) {
grap = new Graphic_handler(bot);
grap.start();
}