2017-03-02 28 views
-2

在下面的代碼中,我創建了一個可調用的函數,它在call()方法內創建一個Runnable。我的問題是,run() - 方法永遠不會到達(代碼不會被執行)。你知道爲什麼以及如何解決這個問題嗎?Runnable不能在Callable中運行

public static void main(String[] args) { 

    Callable<Object> c = new Callable<Object>() { 

     @Override 
     public Object call() throws Exception { 

      Runnable r = new Runnable() { 

       @Override 
       public void run() { 
        System.out.println("hi"); 

       } 
      }; 

      return null; 
     } 
    }; 

    try { 
     c.call(); 
    } catch (Exception e) { 

    } 
} 
+4

您已經忘記調用'r.run();' – Andremoniy

+3

好吧,您實際上不會調用run方法 – kamehl23

回答

1
Callable<Object> c = new Callable<Object>() { 

      @Override 
      public Object call() throws Exception { 

       Runnable r = new Runnable() { 

        @Override 
        public void run() { 
         System.out.println("hi"); 

        } 
       }; 
       r.run(); 
       return null; 
      } 
     }; 
     try { 
      c.call(); 

     } catch (Exception e) { 

     } 
+0

您可以通過加入一些文字來解釋您的示例與OP示例的不同之處,從而改進此答案。 –

+0

好的,我從現在開始 – Friendassist

0

你知道爲什麼......

別人已經說明:您已經編寫了創建Runnable實例代碼,但您的代碼不與實例做任何事創建它之後。您的代碼不會直接調用run()方法,您的代碼也不會將該實例傳遞給任何其他調用該方法的對象。

...以及如何解決這個問題?

這將取決於你想要的代碼什麼做。如果你想要的只是寫出一個打印「嗨」的程序,那麼有更簡單的方法。

看起來好像你在學習一些東西,但是你沒有告訴我們你想學什麼。

相關問題