2017-07-17 42 views
-3

我正在使用JDA(Java)爲Discord創建一個bot。我在嘗試在Java控制檯上簡單調試消息時遇到問題。 我想打印「機器人運行」,但不起作用。它不打印。不一致JDA OnReady不起作用

問題出在onReady()上,請看代碼。

public class MessageListener extends ListenerAdapter 
{ 
    public static void main(String[] args) 
     throws LoginException, RateLimitedException, InterruptedException 
    { 
    JDA jda = new JDABuilder(AccountType.BOT).setToken("x").buildBlocking(); 
    jda.addEventListener(new MessageListener()); 
} 

@Override 
public void onMessageReceived(MessageReceivedEvent event) 
{ 
    if (event.isFromType(ChannelType.PRIVATE)) 
    { 
     System.out.printf("[PM] %s: %s\n", event.getAuthor().getName(), 
           event.getMessage().getContent()); 
    } 
} 
@Override 
public void onReady(ReadyEvent e){ 

      String server = "bot running\n"; 
      System.out.println(server); 
    } 
} 

編輯: 代碼更新 Sry基因我搞砸了的代碼,但 「OnReady」 不起作用。它應該在機器人加載時起作用

+0

你在哪裏調用'ReadyListener'?請提供一個最小化,完整,可驗證的示例以獲得更好的答案 - https://stackoverflow.com/help/mcve – Chris

+0

Sry我搞砸了代碼 – Alberto

+0

歡迎來到Stack Overflow!在嘗試提出更多問題之前,請閱讀[我如何提出一個好問題?](http://stackoverflow.com/help/how-to-ask)。 –

回答

1

因爲您在Bot啓動後添加了Listener。當您在jda上調用buildBlocking時,Bot啓動並阻止此線程。所以這個監聽者從來不會被添加。

JDABuilder builder = new JDABuilder(AccountType.BOT); 
builder.setToken("x"); 
builder.addEventListener(new MessageListener()); 
JDA jda = builder.buildBlocking(); 
+0

你將如何修復代碼? – dcsohl

+0

你應該編輯這個到你的答案。答案(和問題)應該是獨立的,沒有閱讀評論;您也許已經注意到註釋並不適用於代碼塊。 – dcsohl

+0

在嘗試回答更多問題之前,請閱讀[我如何寫出一個好答案?](http://stackoverflow.com/help/how-to-answer)。 –