2014-01-26 50 views
0

即時通訊對於我來說有一些複雜的問題。 我需要一個空的支票在這裏,但據我們都知道這一點!= nullJava「this」null檢查計劃任務

但是在計劃任務中會發生什麼?我在一個對象中有一個可運行的類,並且在大約1分鐘後使用裏面可運行的對象的方法,但是如果那個特定的對象在60秒後現在爲空,我會得到錯誤,所以我只需要空檢查那些空檢查... 例如:

 ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       L2PcInstance.this.stopFear(true); 
      } 
     }, 60000); 

L2PcInstance是基本類/對象上,我想使null檢查

的問題是:

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) 

不要擔心所有的這些類,它們只是觸發器

+3

一個對象不能爲空。一個變量可以引用'null'。 –

+0

你在處理內部課堂嗎? –

+0

是的,這個runnable是L2PcInstance.java的內部,事實是,它有可能在60秒後爲空,而它的明顯不是嗎? – user3236641

回答

2

,但據我們都知道這一點!= NULL

有沒有「據我們都知道」這件事。這個!=根據定義。

我有一個對象,並使用該對象的內部的運行的方法,約1分鐘後IM內部運行的類,但如果特定對象這60秒內

您所描述的情況後,現在是空是不可能的。對象不會變爲空。並且包含內部類實例的對象在內部類之前不會被終結或垃圾收集。

我得到的錯誤

毫無疑問,但不能因爲對象爲空。堆棧跟蹤中的NullPointerException不是來自您發佈的代碼。

+0

對象可能不會變爲null,但是如果玩家註銷,我可以訪問它,但即使請求玩家不再存在,runnable仍然會運行,所以我想停止它的唯一方法是.stop ();當PcInstance註銷時可運行。 – user3236641

+0

它的複雜性,它不僅僅是一個代碼,它是一個帶有2kk行代碼的整個遊戲服務器,ThreadPoolManager類會像您在我發佈的代碼中看到的那樣處理所有Runnables管理,但它永遠不會被告知L2PcInstance.this被註銷並且無法再訪問它...所以解決這個問題的唯一方法是添加一個thread.stop()函數來註冊玩家的註銷碼。 – user3236641

+0

我不知道這意味着什麼,但是您發佈的代碼不會拋出您發佈的異常,並且L2PcInstance.this從未明顯變爲空。我建議你用真正的問題來重新描述你的問題。 – EJP