2017-06-03 1 views
0

Hallo, ich bin im Allgemeinen neu zu Java und arbeite an Minecraft Plugins, um zu beginnen.Rückgabe eines Wertes aus einem anderen Thread. Ohne Haupt Thread zu blockieren

Hier ist mein Problem. Ich versuche, diese Methode auf dem Hauptserver-Thread aufzurufen und den Rückgabewert abzurufen.

Hier ist, was ich versuche zu erreichen.

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

Sie können das Ergebnis einer asynchronen Operation nicht synchron zurückgeben. Ich denke, das ist, was Menschen Zukunft für oder Callbacks oder Observable/Single, etc. – EpicPandaForce

+0

Jeder Rückruf kann Ihnen dabei helfen. –

+0

So gibt es keine Möglichkeit, den Wert direkt vom Methodenaufruf zurückzugeben. –

Antwort

-1

Sie scheinen eine Methode aufzurufen, die eine asynchrone Task plant. Aber eine asynchrone Aufgabe, die direkt einen Wert ohne Blockierung zurückgibt, ist ein bisschen wie ein Oxymoron: Wenn es direkt einen Wert zurückgeben würde, wäre es eine synchrone Operation. Die Idee von asynchronen Vorgängen besteht darin, dass Sie den Vorgang ausführen, um das Ergebnis zu einem späteren Zeitpunkt abzurufen, wenn es fertig ist, aber Ihr Haupt-Thread weiterhin ausgeführt wird. Sie müssen das Ergebnis Ihrer asynchronen Aufgabe also an einem Ort speichern, auf den Ihr Hauptthread zugreifen kann, wenn es fertig ist.

Ich bin nicht vertraut mit der Minecraft-Code-Basis, aber ich hoffe, das hilft trotzdem.

Verwandte Themen