Smack 异常 - 由我的 Java 安装或 Smack 引起
Posted
技术标签:
【中文标题】Smack 异常 - 由我的 Java 安装或 Smack 引起【英文标题】:Smack Exception - caused by my Java installation or by Smack 【发布时间】:2011-07-01 19:37:16 【问题描述】:我正在使用 Smack API 开发多用户游戏客户端。 我的 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 ... 提前致谢。
【问题讨论】:
您可以将null
传递给parseCustomTimeZone
吗?
没问题。我没有使用过 Smack,但我经常从 Java 库中看到这些异常,因为方法假设传入了非空参数。最简单的测试方法是尝试使用 null
直接调用它。
感谢您的回复。这是不可能的,因为我不使用这种方法……也许 Smack 在 API 的某个地方使用了这种方法,但这是一个奇怪的问题,因为相同的代码在另一台计算机上运行良好。
你是说不能试试class MyTestpublic static void main(String[] args)java.util.TimeZone.parseCustomTimeZone(null);
?我不能,因为我没有使用 Java 7。
哦,对不起...我不明白你的要求!明天早上(在意大利这里现在很晚:))我会尝试使用这种方法,我会在这里发布结果。无论如何,我正在使用 java 1.6.0_24
【参考方案1】:
这更像是 cmets 的延续,而不是一个完整的答案(但希望它有所帮助)。
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
或任何其他类型的异常。也许您可以运行相同的测试程序,看看会发生什么。我的猜测是它会为你失败。它可能表示 Java 安装失败。
【讨论】:
谢谢史蒂夫。我在 zi.setID("GMT+00:00:00"); 上收到 NullPointerException 你有没有追根溯源?显然,smack 中的某些东西正在将不可靠的数据传递给该方法。 根本原因是,如你所想,我的 java 安装。我安装了 Apple 5 天前发布的最新更新(1.6_026),现在我的代码运行良好!非常感谢您的帮助! 没问题。当我从区域文件中请求区域信息时,我一看到返回 null 就想到了这一点。 @Steve - Smack 正在传递“GMT+0”,这并不狡猾,尽管 +0 可能是多余的。以上是关于Smack 异常 - 由我的 Java 安装或 Smack 引起的主要内容,如果未能解决你的问题,请参考以下文章
使用 xmpp + smack + openfire 在 android 中阻止用户