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