I'm a Java beginner. I want to call a Method in a running Java Thread Object. It always throws this exception:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "Graphic_handler.next()" because "this.this$0.grap" is 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();
}
}
(Code is simplified)
Here is the part of the Code where I call the Method:
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();
}
Im trying to call the Methods next() and last() here.
CodePudding user response:
What's going on is you have a local variable that is hiding the instance variable.
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();
}
To fix this just remove the declaration in front of grap
in the method.
class SomeClass {
Graphic_handler grap;
public static void main(String[] args) {
grap = new Graphic_handler(bot);
grap.start();
}