2011-07-01 6 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

'parseCustomTimeZone'に' null'を渡すことができますか? –

+0

問題ありません。私はSmackを使用していませんが、null以外のパラメータが渡されていると仮定しているため、Javaライブラリからこれらの例外が頻繁に見えます。テストする最も簡単な方法は、 'null 'で直接呼び出すことです。 –

+0

ご返信ありがとうございます。私はこのメソッドを使用しないため、これは不可能です。SmackはこのメソッドをAPIのどこかで使用していますが、同じコードが別のコンピュータでうまく動作するため、これは奇妙な問題です。 – Davide

答えて

1

は、の返答ではなく、コメントの続きの続きです(でもうまくいけば助かります)。

Javaソースの違反行はzi.setID("GMT+00:00");となります。 ziのタイプはsun.util.calendar.ZoneInfoです。これは、ziがnullであることを意味します。次のように作成されているさらにアップ:私はどのNullPointerExceptionまたは例外の他のタイプを取得できませんでした

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"); 
    } 
} 

zi = ZoneInfoFile.getZoneInfo("GMT"); 

だから私は、次の小さなテストプログラムを書きました。おそらく、あなたは同じテストプログラムを実行し、何が起こるか見ることができます。私の推測では、それはあなたのために失敗するということです。これは、borked Javaインストールを示している可能性があります。

+0

Steveに感謝します。 zi.setID( "GMT + 00:00:00")でNullPointerExceptionが発生しました。 – Davide

+0

根本原因に戻ってそれをトレースしましたか?明らかに、面倒なところでは、その方法に不正なデータが渡されています。 –

+0

根本的な原因は、あなたが想定しているように、私のJavaインストールです。私はアップルが5日前にリリースした最新のアップデート(1.6_026)をインストールしました。あなたの助けをありがとう! – Davide

関連する問題