【问题标题】:What this error stands for and how to fix it?这个错误代表什么以及如何解决它?
【发布时间】:2013-11-22 00:26:29
【问题描述】:

我是 jython/python bukkit 插件编码器,我遇到了奇怪的错误。我正在尝试重新编码已经在 Python 中完成的东西(在 Java 中)...这是代码的 java 部分:

    HashMap<Player, String> channelList = new HashMap<Player, String>();
    public void useChannel(Player p, String format, String channel){
    if(channel == "main"){
        Bukkit.broadcastMessage(format);
    } else {
          Player[] online = Bukkit.getOnlinePlayers();
          for(int a = 0; a <= online.length - 1; a++){
              if(channelList.get(online[a]) == channel){
                  online[a].sendMessage("*" + format);
              }
          }
    }
}

@EventHandler
public void onChat(AsyncPlayerChatEvent event){
    event.setCancelled(true);
    String channel = event.getMessage().substring(0, 1);
    String userChannel = "";
    switch(channel){
    case "!": userChannel = "spanish";
    case "?": userChannel = "french";
    case "@": userChannel = "dutch";
    case "$": userChannel = "spanish";
    default: userChannel = "main";     
    }
    useChannel(event.getPlayer(), event.getFormat(), userChannel);
}

}

这是我在 python/jython 中所做的(请记住,这可能不一样,这是错误的原因):

    channelList = HashMap()

    def useChannel(self):
    format = event.player.AsyncPlayerChatEvent.getFormat()    
    if(channel == "main"):
      Bukkit.broadcastMessage(format)
    else:
        online = Bukkit.getOnlinePlayers()
        b = online.lenght - 1
        a = 0
        for a in a <= b:
            if channelList.get(online[a]) == channel:
               online[a].sendMessage("* %s"%format)

def balkanChannel(self):
    userChannel = "balkan"
    return userChannel

def germanChannel(self):
    userChannel = "german"
    return userChannel

@hook.event("player.AsyncPlayerChatEvent", "HIGHEST")
def onAsyncPlayerChatEvent(event):
    event.setCancelled(1)
    channel = event.getMessage().substring(0, 1)
    userChannel = ""  
    try:
       options = {
               '!': pyplugin.balkanChannel,
               '$': pyplugin.germanChannel}
       if value in switch:
          switch[value]() 
       else:
           pass
    except KeyError:
          userChannel = "main"
    pyplugin.useChannel(event.getPlayer(), event.getFormat(), userChannel)

这是与聊天相关的插件,它应该在 AsyncChatPlayerEvent 时检查是否有!或消息中的 $ 前缀...这些前缀在 Java 中作为“案例”完成,但据我所知,在 Python 中没有类似的东西,所以我这样做了(这可能不是正确的方式) ?

这是我在与这些前缀($ 和!)聊天时遇到的错误:

14:38:59 [SEVERE] java.util.logging.ErrorManager: 5
>
Exception: org.python.core.PyException thrown from the UncaughtExceptionHandler
in thread "Connection #1 read thread"

总而言之,我正在尝试将上面的 java 代码“重新编码”为 python,但我得到了一些奇怪的错误...

感谢您的回答! :)

附:服务器在吐出错误后冻结...如果您需要更多信息,请发表评论...

【问题讨论】:

  • onAsyncPlayerChatEvent中,valueswitch是什么?
  • @Vlad 无论如何,我只是意识到每当我使用该事件时它都会吐出同样的错误?你知道那个错误在说什么吗,因为没有任何痕迹......
  • PyException 有一个 traceback 关联,但我不知道如何使用它。最简单的做法是,您可以将所有内容包装在 try 语句中,并在末尾加上 except Exception, e: print e.message
  • @Vlad 像这样尝试过:pastebin.com/EdLERw3Y 但它返回相同的错误..
  • 如果你想以e 访问异常,你需要except Exception, e 而不是except Exception

标签: java python exception jython


【解决方案1】:

这是我的错,对不起。我使用了错误的事件...

我使用的是 AsyncPlayerChatEvent 而不是常规的 PlayerChatEvent...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 2021-06-25
    • 2021-01-10
    • 2023-01-24
    • 1970-01-01
    相关资源
    最近更新 更多