提问者:小点点

在正在运行的线程对象中调用方法


我是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()。


共1个答案

匿名用户

发生的事情是您有一个隐藏实例变量的局部变量。

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();
    
}