Java 爪哇语;这";空签入计划任务

Java 爪哇语;这";空签入计划任务,java,null,this,Java,Null,This,我对一件对我来说很复杂的事情有些意见。 我需要一个空检查,但据我们所知!=空的 但是在计划任务中会发生什么呢?我在一个对象中有一个可运行类,大约1分钟后我在该可运行类中使用该对象的方法,但是如果该特定对象在这60秒后现在为null,我会得到错误,所以我只需要null检查这些null检查。。。 例如: ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { @Overr

我对一件对我来说很复杂的事情有些意见。 我需要一个空检查,但据我们所知!=空的

但是在计划任务中会发生什么呢?我在一个对象中有一个可运行类,大约1分钟后我在该可运行类中使用该对象的方法,但是如果该特定对象在这60秒后现在为null,我会得到错误,所以我只需要null检查这些null检查。。。 例如:

        ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
        {
            @Override
            public void run()
            {
                L2PcInstance.this.stopFear(true);
            }
        }, 60000);
L2PcInstance是我要对其进行空检查的基本类/对象

问题是:

null
Exception in thread "AISTPool-7" java.lang.NullPointerException
    at net.sf.l2j.gameserver.model.actor.instance.L2PcInstance.endSpree(L2PcInstance.java:11293)
    at net.sf.l2j.gameserver.model.actor.instance.L2PcInstance.doDie(L2PcInstance.java:4230)
    at net.sf.l2j.gameserver.model.actor.status.PcStatus.reduceHp(PcStatus.java:215)
    at net.sf.l2j.gameserver.model.actor.instance.L2PcInstance.reduceCurrentHp(L2PcInstance.java:9431)
    at net.sf.l2j.gameserver.model.actor.L2Character.reduceCurrentHp(L2Character.java:5957)
    at net.sf.l2j.gameserver.model.actor.L2Character.onHitTimer(L2Character.java:4359)
    at net.sf.l2j.gameserver.model.actor.L2Character$HitTask.run(L2Character.java:2246)
    at net.sf.l2j.gameserver.ThreadPoolManager$RunnableWrapper.run(ThreadPoolManager.java:85)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
不要为所有这些类担心,它们只是触发器

但就我们所知!=空的

据我们所知,这件事没有什么“据我们所知”。这个!=定义为空

我在一个对象中有一个runnable类,大约1分钟后,我在这个runnable类中使用对象的方法,但是如果这个特定的对象在那60秒后现在为null

你所描述的情况是不可能的。对象不会变为null。而封闭内部类实例的对象不会在这些内部类之前完成定稿或垃圾收集

我会犯错误


毫无疑问,但不是因为对象为空。堆栈跟踪中的NullPointerException不是来自您发布的代码。

对象不能为
null
。变量可以引用
null
。我刚才告诉过你,对象不能是
null
。引用该对象的变量可以设置为引用
null
,但这不是一回事。我看不出您发布的代码与您发布的堆栈跟踪有何关联。发布。如果您需要执行
null
检查,请执行
null
检查,但它不会用于
L2PcInstance。这是因为它永远不会是
null
这也不会发生。您的Runnable是一个内部类的实例。内部类实例保留对外部对象的引用。因此,在Runnable停止运行之前(实际上,直到Runnable变得不可访问之前),外部对象无法最终确定。因此,你的问题和评论毫无意义。您遇到的实际问题是什么?对象可能不会变为null,但如果玩家注销,我无法访问它,但是即使请求它的玩家不再存在,runnable仍将运行,因此我猜停止它的唯一方法是。stop();PcInstance注销时的runnable。它很复杂,不仅仅是一个代码,它是一个包含2kk行代码的整个游戏服务器,ThreadPoolManager类采用了我发布的代码中所示的所有runnable管理,但它从未得到通知L2PcInstance.this已注销,无法再访问它。。。因此,处理这个问题的唯一方法是在播放器的注销代码上添加一个thread.stop()?我不知道这意味着什么,但您发布的代码不会抛出您发布的异常,L2PcInstance.this永远不会明显变为null。我建议你根据实际问题重新表述你的问题。