NullPointerExceptionって何?

閉じる戻る茶゛碁 on Mac トップへ戻る

Apple Support Discussion Board でのやりとり

「茶゛碁 on Mac の謎」のページにある(3)の件、NullPointerExceptionエラーのJava Console窓がときどき現れる現象について、Appleサイトの Support の Discussion Board で、下記のようなやりとりがありました。一応、ここに再掲して記録として残しておきます。


トピック: MRJでのNullPointerExceptionって特に問題ないのでしょうか? 2002/03/28 mak

Mac OS 9.2.2, MRJ 2.2.5 の環境で、Javaアプリを走らせていると、しばしば、突然Java Console窓が開いて次のようなメッセージが出るんですが、どう対応したら良いのでしょうか?特に操作上の不都合は起きていないので、いつも単にConsole窓を閉じるだけですませているんですが、、、
Javaにお詳しい識者の方々、よろしくお願いいたしますm(_ _)m

Java Console窓の内容:
-----------------------------------------------------------
java.lang.NullPointerException
at com.apple.mrj.internal.awt.PortState.create(Compiled Code)
at com.apple.mrj.internal.awt.PortState.create(PortState.java)
at com.apple.mrj.internal.awt.VComponentPeer.setPort(Compiled Code)
at com.apple.mrj.internal.awt.View.setPort(Compiled Code)
at com.apple.mrj.internal.awt.VTextComponentPeer.idle(Compiled Code)
at com.apple.mrj.internal.awt.VToolkit.idle(Compiled Code)
at com.apple.mrj.internal.awt.VToolkit$VIdleThread.run(VToolkit.java)
-----------------------------------------------------------

使っているJavaアプリというのは、Jagoというフリーウェアです。これは囲碁のオンライン対局に用いるクライアントソフトです。
くわしいことは、以下のURLをごらんください:
http://www.geocities.co.jp/Playtown-Dice/1976/mystery.html

どうかよろしくお願いいたしますm(_ _)m


Re: MRJでのNullPointerExceptionって特に問題ないのでしょうか? 2002/03/28 Aさん

作者に知らせてあげると喜んでもらえるかも知れませんね。
VToolkit.javaってソースの中のオブジェクトへの参照で初期化されていないものがあるのでしょう。


RE(1): RE: MRJでのNullPointerExceptionって特に問題ないのでしょうか? 2002/03/28 mak

質問者のmakです。
-----
最初にお断りしておきますが、私はプログラミングなどは全くできないシロートです。JavaのJの字もわかっておりません(^^ゞ 
-----
Aさん、すばやいReplyどうもありがとうございますm(_ _)m

> 作者に知らせてあげると喜んでもらえるかも知れませんね。

作者はドイツ人の教授でして、私は何度か英語でメールをやりとりしたことが実はあります。しかし、むこうは専門家/こっちはシロート、両者とも英語はイマイチ?、だったせいか、かなりトンチンカンなやりとりでした(^^ゞ まあ、何とかうまく英作文ができればこの件もお知らせしてあげるかもしれません、、、

> VToolkit.javaってソースの中のオブジェクトへの参照で
> 初期化されていないものがあるのでしょう。

すみません、ちょっと解説してくださいm(_ _)m

あのJava Console窓の内容から判断して、「VToolkit.javaというソース」は、このJavaアプリに属するものなんですか? それともMRJに属するものなんですか?

と申しますのは次のような背景です。
私の運営するサイトの掲示板に、やはり多分プロのエンジニアと思われる方が書き込みをして下さいました。その方はこのJava Console窓の内容を見て、このように書き込まれたのです:

-------------------------------------------------------
これはポインタの問題です。
ポインタはJAVAには無いと言われているのですが、多くの人がこのエラーを見てその存在を確認するという、ある意味有名なエラーです。

ポインタそのものについては職人エンジニアのメシの種ながら、へっぽこエンジニアの頭痛の種でして、説明していると長くなるので説明は割愛しますが、完全に技術的な問題です。

そして問題を起こしているのが、ログを見る限り全て
com.apple.mrj.internal.awt
の中身なのでこれは Apple 問い合わせしか無いと思います。
(MRJ の開発者用のドキュメントにも名前が出て来ない。おそらく完全な内部部品であると思われます)

残念ながら私のMacでは再現しないので、管理人様のMacのOSのバージョン、MRJのバージョン、メモリ&CPUなどの情報を併記の上、Apple に問い合わせてみてはいかがでしょうか?
(MRJに関する問い合わせはSUNではなくAppleです)

スレッドの切替が発端となって起きているようですから、本当に突然やってきます。
有効な防衛策は…エラーの性質から考えると、ウィンドウを閉じる事を控える事で、発生頻度を落とせるかもしれません。
-------------------------------------------------------

、、、と。

この方の上の文章から、私としては、「エラーの責任(?)はJavaアプリ側ではなく、MRJの側にある」という主旨だと受け取ったのですが、、、、

一方、Aさんのコメントからは、「エラーの責任はJavaアプリの側にある」という主旨だと感じました、、、、

この点、どうなんでしょう???

#なんか、せっかくReplyしていただいたAさんにケンカ売って
 るみたいになって非常に恐縮ですm(_ _)m どうかお気を悪くな
 さらないでくださいね、、、

     *     *

しかしまあ、このアプリを使っているこちらにとっての現実問題としては、「こういうJava Console窓が現れた後も、全く気にせず、Console窓を閉じて操作を続行」して良いのか? それとも「something wrong だからアプリを一旦終了して、もう一度開きなおす」べきなのか? この点の方が気になるのですが、このあたりはいかがでしょうか、、、

     *     *

もし本件に興味をもたれて色々自分でも調べてみたいという奇特な(?)方がいらっしゃれば(^^ゞ、私のサイトをごらんください(もう少し詳しい事情が載っております):

http://www.geocities.co.jp/Playtown-Dice/1976/mystery.html

     *     *

よろしくお願いいたしますm(_ _)m
ではでは               (^ ^ )/~~


RE(2): RE: RE: MRJでのNullPointerExceptionって特に問題ないのでしょうか? 2002/03/28 Aさん

え〜と、参照云々とポインタ云々は基本的には同じことです。
Javaではポインタって言い方しないのでオブジェクトへの参照って書いただけです。

>一方、Aさんのコメントからは、「エラーの責任はJavaアプリの側にある」という主旨だと感じました、、、、
>この点、どうなんでしょう???

わたしは、com.apple.mrj.internal.awt.VToolkit$VIdleThread.run(VToolkit.java)を継承しているか、それに登録している“なにか”が悪さしているんじゃ無いのかなぁと単純に思っただけなので。実際のプログラムがどういう物かも知らないし、VToolkit.javaをどう使っているのかも知れないし。多分ピアがどうとかって辺りだと思うけど。

それを使ったプログラムを書いている作者からAppleに連絡した方が話がスムーズに進む様な気がするのですが。連絡せずに、その現象を回避する様なコードを書くことも出来るでしょうし、連絡する為にその現象を再現させる為の簡単なコードを書くことも出来るでしょうし。

内部的な事情が解っていないユーザがAppleに直接連絡した所で、Appleも困るだけでしょう。


RE(3): RE: MRJでのNullPointerExceptionって特に問題ないのでしょうか? 2002/03/29 mak

質問者のmakです。

Aさん、毎回すばやいReplyありがとうございますm(_ _)m

> え〜と、参照云々とポインタ云々は基本的には同じことです。
> Javaではポインタって言い方しないのでオブジェクトへの参照って書いただけです。

基本的には、「Apple問い合わせすべし」って書き込んだ方と、同じことをおっしゃってたんですね。

> わたしは、
> com.apple.mrj.internal.awt.VToolkit$VIdleThread.run(VToolkit.java)を継承して
> いるか、それに登録している“なにか”が悪さしているんじゃ無いのかなぁと
> 単純に思っただけなので。

はい。このあたり、シロートには難しいですが、作者に連絡することになったら、「これこれこういう意見の方がいた」と伝えるべく努力いたします。

> それを使ったプログラムを書いている作者からAppleに連絡した方が話が
> スムーズに進む様な気がするのですが。

おっしゃるとおりですね。

# でも今回、先ほどの「Apple問い合わせすべし」という書き込みが私のサイトの掲示板にあったので、実は私なりにAppleへの問い合わせ窓口(要はメールアドレス)をこのAppleのサイトで探したんですが、みつけられませんでした。それで、ここに投稿してみたというわけなんです。Appleの技術者さんが、このやりとりをひょっとして目にとめてくれるかな〜などと思いながら、、、
追記:「ご意見・ご要望に関して」というページがある事に、その後気付きました。tell_us@apple.co.jpがAppleさんへのメール窓口になっているようです。ここで訂正いたしますm(_ _)m

ま、期待薄ですが、ひょっとして見ててくれてるかもしれないので一応情報源を示しておきます。

このJavaソフトはソースが公開されてます。
Homepageは:
http://www.rene-grothmann.de/jago/
ソースは:
http://www.rene-grothmann.de/jago/download/jagosrc.zip

です。
Appleの技術者さ〜ん! 見てますか〜!!  (^^)

ついでに書いておくと、この「Java Console窓現象」は、MRJ SDKのJBinderyで作ったスターターでこのJavaアプリを起動した場合に特有のもののようです。Zero GのInstallAnywhereが作ったスターターで起動した場合には起こらないみたいなんですよ(全然はずしてるかもしれませんが、InstallAnywhereだとlax.jarというファイルも作るので、これが効いてるのかな??)。さっきの「Apple問い合わせすべし」氏が、「私のMacでは再現しない」って言ってたのは、おそらくInstallAnywhereでインストールしたからだろうと私は推測しています。この「Java Console窓現象」を再現するには、JBindery製のスターターでこのJavaアプリを起動して、とにかくなんでもいいからウィンドウを開いたり閉じたりし続ければいいでしょう。そのうちきっと最初の質問に書いたようなJava Console窓が現れるでしょう。

さっ、これでだいたいすべての情報は出し尽くせました。

Appleの技術者さ〜ん! よろしくね〜   (^^)

     *     *

Aさん、お相手して下さって本当にありがとうございましたm(_ _)m

このやりとりで、「Apple問い合わせ」は済んだので (^^)
あとは作者に伝えるべく、英作文に取り組みます。Aさんの推測も出来るだけがんばって英訳してみます。

ありがとうございましたm(_ _)m   ではでは  (^ ^ )/~~


RE(4): RE: RE: MRJでのNullPointerExceptionって特に問題ないのでしょうか? 2002/03/29 Aさん

ソースをまじめに読んでないのでアレですけど、jagoclient.GlobalObject.javaのgetToolkit()している所が怪しいのかも。

最近javaからちょっと離れているので昔の話になりますが、一度実際に画面に描画された後で無いとToolkitオブジェクト引っ張ってこようとしても失敗した様な気が。(一度描画した後で無いとピアが作成されない)

#MRJじゃなくてWinのJDK1.1ぐらいの頃。

フォントの情報が欲しくて少し悩んだことがありましたし。


お騒がせしています 2002/03/29 黒緒

こんばんわ、該当トピックスにレスを付けました、黒緒@贖業エンジニアです

例外の起点が MRJ の内部クラスである事と、現象が突然起きるという記事から、通信関連スレッドの問題か、MRJ の問題であろうと推察していました。
通信関連スレッドの設計の問題であれば、他の環境でも頻発している可能性が高く、MRJ から確認したいな、と考えてしまいました。
まずは作者への連絡が筋であり、Apple への問い合わせを誘導したのは私のミスです。すいませんでした。

なお、追加で頂いた発生のタイミングは「ウィンドウ(子画面)を閉じた瞬間」との情報から、何らかのオブジェクトの同期に失敗しているものと考えます。
…間違いなく作者さんに連絡ですね、お騒がせしました m(_ _)m


RE(5): RE: MRJでのNullPointerExceptionって特に問題ないのでしょうか? 2002/03/30 mak

質問者のmakです。

Aさん、いつもすばやいReplyありがとうございますm(_ _)m

> ソースをまじめに読んでないのでアレですけど、
> jagoclient.GlobalObject.javaのgetToolkit()している所が怪しいのかも。

あ、ソースまで見ていただけたんですね、ありがとうございますm(_ _)m

ところで、私のサイトで「Apple問い合わせすべし」との書き込みをされた黒緒さんがここにも書き込んで下さいましたね。どうやら意見は「まず作者へ連絡を」で一致をみたようで、めでたし、めでたし。   (^^)

で、私は今作者へ送るメールの英作文をやってます。しかし、一応、例の「Java Console窓現象」をもう2〜3回くらいしっかり確認して、発生の頻度やタイミングなどをよく見極めてから送ろうと思っています。これからしばらく、JBindery製スターターで起動したJagoで囲碁のネット対局をたくさんやって、この現象を再現させようと思っています。

作者にメールを送るか、現象の発生条件について新たな発見があったりしましたら、またこちらで御報告したいと思います。

Aさん、黒緒さん、いろいろありがとうございましたm(_ _)m

ではでは         (^ ^ )/~~


RE(6): RE: MRJでのNullPointerExceptionって特に問題ないのでしょうか? 2002/04/05 mak

質問者のmakです。

問題のJavaアプリ「Jago」の作者にメールを送りました。私はやはりシロートなので無理をせず、「継承」とか「登録」とかむつかしい専門用語は使わないで、次のような文面にしました:

email to Dr. Grothmann from me:
==============================================
Here is a rather unimportant Bug-Report of Jago:

* My operating system: Mac OS (since 8.1 - till now 9.2.2)
* My Java version: Mac OS Runtime for Java (2.1 - 2.2.5)
* The version of Jago: I'm sorry, I can't remember exactly. But almost any version (including the v4.33).
* How did I start Jago: This seems to be the point. I started Jago by double-clicking the starter made by JBindery which comes with MRJ Software Development Kit. This problem doesn't happen (maybe) when I use the starter installed by InstallAnywhere's installer.
* What did I do before the trouble: I just closed a window (I'm sorry that I can't say which window exactly. But I think this problem can happen with any kind of window when closing at some rather small probability).
* What was the problem?: Almost nothing. But a Java Console window appears which indicates as follows:
----------------------------------------
java.lang.NullPointerException
at com.apple.mrj.internal.awt.PortState.create(Compiled Code)
at com.apple.mrj.internal.awt.PortState.create(PortState.java)
at com.apple.mrj.internal.awt.VComponentPeer.setPort(Compiled Code)
at com.apple.mrj.internal.awt.View.setPort(Compiled Code)
at com.apple.mrj.internal.awt.VTextComponentPeer.idle(Compiled Code)
at com.apple.mrj.internal.awt.VToolkit.idle(Compiled Code)
at com.apple.mrj.internal.awt.VToolkit$VIdleThread.run(VToolkit.java)
----------------------------------------
* What could I do after the problem?: I think I could do anything just normally even after this problem. The problem is just that a Java Console window appears. So I don't feel this a "problem" (but a kind of "phenomenon").
* Could I find a work-around?: I can avoid this phenomenon by using the starter installed by InstallAnywhere's installer. Now that almost everybody installs Jago with InstallAnywhere's installer, this problem seems rather unimportant, I think.

By the way, one man said that this is a problem occurs with "something" that concerns with "VToolkit.java". Though I don't know what "VToolkit.java" is at all. Another man said I should report this to Apple because something in MRJ is the problem. But the former one said I should not contact Apple because I am totally amateur about Java and ignorant about the programs of Jago, and that Dr. Grothmann is the appropriate person to contact Apple (if necessary) because you know everything about Jago.

So, I decided to send this e-mail to you.
======================================================================

すると、すぐに簡単な返信が来ました。
The reply from Dr. Grothmann to me:
======================================================================
Thanks for your report. Seems I cannot do much for you, since I still not have Mac. Wish I had one! For I got reports on a problem with resizing windows, which I also cannot solve.

Thanks anyway for your support for Jago,
======================================================================

ま、今後の進展は期待薄ですね、、。GrothmannさんはMacユーザから不具合報告があるたびに、「誰かMacをひとつワシに恵んでくれんかねぇ?そしたらワシはMacでの不具合を解決してやるのだがねぇ、、、。お〜い、だれか余ってるマシンをワシに贈ってくれ〜」とおっしゃるのですよ(^^)。

それにしても、「"VToolkit.java"って一体何で、どのあたりに問題がありそうなのか」について何もコメントが無くってちと残念でした、、、。

   *   *   *

ま、これにて一件落着。Aさん、黒緒さん、どうもありがとうございましたm(_ _)m

ではでは         (^ ^ )/~~


RE(7): RE: MRJでのNullPointerExceptionって特に問題ないのでしょうか? 2002/04/05 Aさん

>ま、今後の進展は期待薄ですね、、。GrothmannさんはMacユーザから不具合報告があるたびに、「誰かMacをひとつワシに恵んでくれんかねぇ?そしたらワシはMacでの不具合を解決してやるのだがねぇ、、、。お〜い、だれか余ってるマシンをワシに贈ってくれ〜」とおっしゃるのですよ(^^)。

まあ、当然の反応かも(^^;)

>それにしても、「"VToolkit.java"って一体何で、どのあたりに問題がありそうなのか」について何もコメントが無くってちと残念でした、、、。

(クラス名から判断してるだけですが)普通、Toolkitと付いている場合は、プラットフォーム(WindowsやらMacOSやら)に依存している機能(ウィンドウの描画とかフォントとか)を実装している部分の事なので、JVM(MRJ)を実装しているメーカー(この場合はApple)の守備範囲になります。パッケージもcom.apple.mrjとなってますし。

一般的な開発者はこれを使う側なので、実機があればソフトウェアの挙動からある程度推測する事も出来ますが、実機が無いとそれすら出来ないと言う事になります。一体何が起こっているのか確かめ様が無い訳ですから。

「実機を用意してくれれば調べてあげよう」と言ってくれているので、その作者さんはいい人だと思いますよ(^^)


RE(8): RE: MRJでのNullPointerExceptionって特に問題ないのでしょうか? 2002/04/05 黒緒

> 「実機を用意してくれれば調べてあげよう」と言ってくれているので、その作者さんはいい人だと思いますよ(^^)

Mac を買ってくれればもっといい人なのに…(^ ^)

私もソースを眺めて見たのですがさっぱりです>ヘボですので(--;
動くので良しとしましょう

「対局」フレームを閉じる時に「碁盤」オブジェクトの廃棄処理が行われておらず、「碁盤」オブジェクトにはシンクロナイズされたメソッドが多く含まれ、かつ、「碁盤」描画中にストップされる「手順」スレッドがあったりするのが、気になると言えば気になるのですが…
幾つかの対局を開いたり閉じたりして見ると、どの対局も観戦していない状態で石音(着手音)が聞こえてきたりしますが…忘れましょう(^-^;

後日談:

2002年秋、あるソフトウェア技術者の方から上記の問題に関するコメントをメールでいただきました。
難しい話は(makにはよくわからないので(^^ゞ)省いてアッサリ言うと、『NullPointerExceptionが生じるのは、「メモリ不足」が原因なのかもしれないよ』とのことでした。
そう言われてみれば、メモリ64MBの古いMacで茶゛碁を使っていた頃はこれが頻発していたけれど、もっとたくさんメモリを積んだマシンを使い始めてからは少なくなったような気もします、、、
このページ「Java 2 Platform SE 1.3: クラス NullPointerException」を参照して下さい、とのことでしたが、、、makはJava言語は全然わからないのでサッパリでした(x_x;)



閉じる戻る茶゛碁 on Mac トップへ戻る
beacon