2011-07-01 24 views
1

我使用Smack API开发多用户游戏客户端。 我的应用程序出现问题:我可以向服务器发送消息和请求,但我的应用程序无法读取它的响应。Smack异常 - 由我的Java安装或Smack导致

Exception in thread "Smack Packet Reader (0)" java.lang.ExceptionInInitializerError 
      at java.lang.Class.forName0(Native Method) 
      at java.lang.Class.forName(Class.java:169) 
      at org.jivesoftware.smack.provider.ProviderManager.initialize(ProviderManager.java :193) 
      at org.jivesoftware.smack.provider.ProviderManager.<init>(ProviderManager.java:436) 
      at org.jivesoftware.smack.provider.ProviderManager.getInstance(ProviderManager.jav a:134) 
      at org.jivesoftware.smack.util.PacketParserUtils.parseIQ(PacketParserUtils.java:30 3) 
      at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:229) 
      at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43) 
      at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:70) 
Caused by: java.lang.NullPointerException 
      at java.util.TimeZone.parseCustomTimeZone(TimeZone.java:767) 
      at java.util.TimeZone.getTimeZone(TimeZone.java:471) 
      at java.util.TimeZone.getTimeZone(TimeZone.java:465) 
      at org.jivesoftware.smackx.workgroup.packet.TranscriptsProvider.<clinit>(Transcrip tsProvider.java:44) 
      ... 9 more 
No response from the server.: 

这不是一个网络(防火墙,NAT ...)问题(在另一台Macintosh在同一子网内,同样的代码没有例外运行良好)。我检查了我的MacOS防火墙,看起来好了......我能做些什么来解决这个问题? 我不知道这个问题取决于java还是Smack ... 在此先感谢。

+0

你可以传递'null'到'parseCustomTimeZone'吗? –

+0

没问题。我没有使用Smack,但是由于假定传入非null参数的方法,我经常会看到来自Java库的这些异常。最简单的测试方法是尝试直接使用'null'调用它。 –

+0

感谢您的回复。这是不可能的,因为我不使用这种方法...也许Smack在API中的某个地方使用这种方法,但这是一个奇怪的问题,因为相同的代码在另一台计算机上运行良好。 – Davide

回答

1

这更多的评论的延续,而不是一个完整答案(但希望它可以帮助)。

java源代码中的违规行读取zi.setID("GMT+00:00");。 zi类型为sun.util.calendar.ZoneInfo。这只能表示zi是null。另外起来它正在创建如下:

zi = ZoneInfoFile.getZoneInfo("GMT"); 

所以我写了下面的小测试程序:

class Foobar { 
    public static void main(String[] args) { 
     sun.util.calendar.ZoneInfo zi = sun.util.calendar.ZoneInfoFile.getZoneInfo("GMT"); 
     zi.setID("GMT+00:00:00"); 
    } 
} 

我没有得到任何NullPointerException或任何其他类型的异常。也许你可以运行相同的测试程序,看看会发生什么。我的猜测是它会失败。它可能表示一个borked Java安装。

+0

谢谢史蒂夫。我在zi.setID(“GMT + 00:00:00”)上得到一个NullPointerException; – Davide

+0

你是否追溯到根源?很明显,有些东西是将不良数据传递给该方法。 –

+0

根本原因是,正如你所设想的那样,我的java安装。我安装了Apple 5天前发布的最新更新(1.6_026),现在我的代码工作正常!非常感谢你的帮助! – Davide