2017-06-03 120 views
0

你好,我通常是新來的Java和Minecraft插件工作開始。從另一個線程返回一個值。沒有阻塞主線程

這是我的問題。我試圖在主服務器線程上調用此方法並獲取返回值。

這是我想要實現的。

private String FetchEntry(String TableName, String KeyID, String ColumnName) { 

    String value = "NOTHING"; 

     Bukkit.getServer().getScheduler().scheduleAsyncDelayedTask(LGCore.plugin, new Runnable() { 
     @Override 
     public void run() { 

      try { 
       ResultSet resultSet; 
       resultSet = GetConnection().createStatement().executeQuery("SELECT " + ColumnName + " FROM " + TableName + " WHERE IdKey='" + KeyID + "';"); 
       resultSet.first(); 
       String returnvalue = resultSet.getString(1); 
       //Here i would like to set value to returnvalue and return it      

      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 

    return value; 

} 
+1

您將無法同步返回異步操作的結果。我認爲這是人們使用Future,或者回調,Observable/Single等等。 – EpicPandaForce

+0

任何回調都可以幫助你做到這一點。 –

+0

因此,無法從方法調用中返回正確的值。 –

回答

-1

您似乎在調用一個調度異步任務的方法。 但是,一個直接返回一個沒有阻塞的異步任務就像一個矛盾:如果它直接返回一個值,它將是一個同步操作。 異步操作的思想是,您運行操作以在稍後準備好時檢索結果,但主線程繼續運行。 因此,您需要將異步任務的結果存儲在主線程準備就緒的地方。

我不熟悉Minecraft的代碼庫,但我希望這有助於反正。

相關問題