GO HOME

「愛と青春のJavaプログラミング」追補情報


※ここは、拙著のJava入門書「愛と青春のJavaプログラミング」(毎日コミュニケーションズ、544頁、3500円)に関するコーナーです。現在、初版の見直し作業をしていますが、いくつかの間違いなどもありますので、そうした校正情報などをここでまとめて掲載します。



 ★バグ情報★

※ここでは、ソースコードや内容に関する記述間違いについて整理しておきます。事前に何度もチェックはしているのですが、やはりいくつか間違いを残したまま出版になってしまいました。購入された方、すみません。致命的な間違い(?)や、間違いにより意味がわからなくなっているような部分は幸いまだ見つかっていませんのでご安心を。



※P.142 [リスト19]のPaintメソッド4行目

 g.drawString ("Click at:" + clickX + "," + clickY,25,25);
    ↓
 g.drawString ("Click at:" + x + "," + y,25,25);

このリスト19は、間違ったソースコードの例として動かないプログラム例をあげていますが、その間違え方が間違ってました(笑)。ここでは「Paintメソッドで使えるように宣言されていない変数を使っている」という間違いを表現するつもりでしたが、実際には「もともと宣言されていない変数を使っている」というようなソースコードになっています。まあ、同じ「間違った変数を使っている」ということではあるのですが、読んでいて「なぜここにclickXとかclickYという見たことない変数がいきなり登場するのだろう?」と不思議に思った方もいたかも知れません。そういうことですので、clickX,clickYをそれぞれx,yと読み替えてください。



※P.355 [リスト58]のPublic MyWindow2()メソッド5行目

 MyB = new Button ("Click:" + XX);
 XX = 0;
  ↓
 XX = 0;
 MyB = new Button ("Click:" + XX);

これは、なぜこうなってしまったのかよくわからないのですが…。この2行は、見ればわかるように順番が逆になっています。変数XXに代入してから使わないと意味がないですからね。まあ、実は上の順番が逆になっている状態でもJavaのコンパイラはちゃんとコンパイルしてくれ、何の問題もなく動いてくれるんですが…。これは全くの単純な凡ミスでした。



※P.363 [リスト60]の2行目

 import MyWindow3;
  ↑
 この行は必要ない

これは、こちらの修正ミスです。同じ階層(フォルダ)内に呼び出すクラスファイルがある場合、import文など書かなくともそのクラスは呼び出せます。ですから、このリスト60で自作のMyWindow3クラスを呼び出す場合も、importする必要はないのです。もちろん、書いてあっても別に問題はないので心配はいりません。



※P.396 上から11行目(空白行含まず)

 MyB.addActionListener (new MyBAdaptor);
  ↑
 MyB.addActionListener (new MyBAdaptor () );

これは、ver. 1.1以降のイベントリスナーActionListenerの組込みの説明です。パラメータ部分にMyBAdaptorをnewしていますが、パラメータの()が抜けています。これはとても単純なケアレスミスでした。



※P.432 このページの下から2行目
 P.436 このページの下から2行目

 Moving = new Thread ();
  ↑
 Moving = new Thread (this)

2カ所ありますが、いずれも同じものです。Threadのパラメータ部分に「this」が抜けています。これは、実は完全なバグの見落としでした。この後の説明でstopした後startが動かないとありますが、それもこのバグからくるものだったのです。ここではsuspendとresumeの説明をする予定だったので、動かなかったのをいいことに「うまく動かないことがある」と書いてしまいました。これは完全なサンプルソースコードのバグで、直せばちゃんと動きます。実に情けない話で、全く恥ずかしい限りです。



※P.494 [リスト72]の2行目

 import java.awt.event.*;
  ↑
 この行は必要ない

java.awt.eventというのは、ver. 1.1以降でサポートされているイベントアダプタクラスを使う場合に宣言するものでしたね。このリスト72は、確かに1.1のプログラムなんですが、よく見るとボタンクリックなどのイベント処理は全くやってません。従って、別にimportする必要はなかったのでした。上級篇に入ってjava.awt.eventを利用するクラスばかり作ってたので、ついうっかりここでも書いてしまいました。単純な凡ミスです。




 ★FAQコーナー★

※ここでは、本書の内容についての質問にお答えします。読んでいて不明な点などありましたら、どうぞ掌田津耶乃までお問い合わせください。その場合は、必ずお使いのOSとJDKのバージョンについて明記ください。



●Windows 95でJDKをインストールして使っています。サンプルを打ち込んでMS-DOSプロンプトより「Javac Hello.java」と実行すると、きちんとHello.classというクラスファイルが作成されました。しかし「java Hello」と実行しても「Can't find class Hello」と表示され実行されません。

答え)基本的な設定を全てチェックしてもなおこのようなエラーが出るとすると、それはおそらくクラスパスの設定の問題でしょう。クラスパスというのは、JDKで実行するクラスのある場所を示すものです。基本的には、これは設定しなくとも動くはずですが、もし動かないようであればこれを手動で設定してみて下さい。やり方は、まずAUTOEXEC.BATをメモ帳などで開きます。そして一番最後に、

SET CLASSPATH=.;C:\JDK\LIB\CLASSES.ZIP

――このように書き加えて下さい。そしてWindowsをリスタートすれば、次回より正常に動くようになるはずです。ここでは、CドライブのルートにJDKがインストールされていると仮定してますが、他の場所にインストールした場合も考え方は同様です。JDKのLIBというフォルダ内にClasses.zipというファイルがあるので「.;《Classes.zipのパス》」という形でCLASSPATHを設定すればいいわけです。注意して欲しいのは、最初の「.;」です。これを忘れると動きません。
 市販のJava開発ソフトなどを買ってインストールするとJDKのJava命令で同様のエラーが出るようになってしまった、というような場合は、開発ソフトをインストールした際にAUTOEXEC.BATに自動的にCLASSPATHを書き加えてしまい、それが影響して動かなくなるということもあります。その場合はAUTOEXEC.BATにCLASSPATHのコマンドが書き加えられているはずですから確認してみて下さい。そして、もしそのようなコマンドが見つかったら、設定する値に上のものを書き加えれば開発ツールもJDKも両方とも使えるようになります。



●Windows 95で、メモ帳でJavaのソースコードを書いて保存しようとすると、必ずTXTという拡張子がついてしまいます。ちゃんと、全ての拡張子を表示するように設定してあるはずなんですが、どうしても保存するときにTXTがとれません。

答え)これは、最近のメモ帳の仕様なのかどうかわからないのですが、保存時に必ずTXTをつけてしまうという質問が、特に最近Windowsを使いはじめた方に多く聞かれるようです。どうも、Javaの拡張子を登録しないと、メモ帳の保存時に自動的にTXTをつけてしまうようです。
 ファイル名の変更でTXTは削除できるはずですので、以下のようにしてみてください。――まず、作成したJavaのファイル(「○○.java.TXT」という名前とします)を選択して「ファイル名の変更」メニューを選び、TXTを削除して「○○.java」という名前に変更します。そして、そのファイルを選択し、「アプリケーションから開く」メニューの「その他」を選んで、Java.exeまたはjavac.exeを選択します。すると、「java」という拡張子がWindowsに登録され、次回からメモ帳でファイルを保存するとき、「○○.java」という形で保存できるようになります。
(※情報提供・鷲塚さん。ありがとうございました)



●Macユーザーですが、上級編まで来て困ってます。MacではJDK 1.1がないと書いてあるんですが、上級編では1.1について説明してあるのでこれより先に進めません。「MacとWindows両方に対応」と書いてあるのに、これじゃ詐欺じゃないですか。

答え)おっしゃる通り、SunによるJDKはMac版は1.0.2のままであるため、1.1のプログラミングができない、という方は多いようです。もちろん、既にVisual Cafeなど商品ソフトは1.1に対応していますが、「1.1以降はソフトを買ってくれ」ではちょっと不親切ですね。
 けれど、諦める必要はありません。確かにSunからJDKはリリースされていませんが、Apple社よりちゃんとMac向けのJava開発環境がリリースされています。それは「MRJ SDK」というものです。「MRJ」というのは、御存じと思いますがMacでJavaプログラムを動かせるようにするためのランタイム環境です。既にMacOS 8以降では標準でシステムに組み込まれているので、知らない内に使っているユーザーも多いことでしょう。
 「MRJ JDK」は、このMRJに対応した開発キットです。現在、2.0.1というバージョンが正式りリースしています。これはJDK 1.1に相当するもので、1.1に用意されているjavaプログラムやjavac、appletviewerといったものは全て用意されています。それだけでなく、JavaのプログラムをMacのアプリケーションに変換するツールやMacのシステムコールをJavaで利用できるようにするライブラリなども充実しています。このMRJ SDK 2.0.1は米AppleのWebサイトにて配付していますのでアクセスしてみて下さい。

http://devworld.apple.com/java/

 だいたいサイズは2.5Mbほどあります。また、MRJ 2.0以降がインストールされてないと動きませんので注意して下さい。



●JavaSoftのホームページにアクセスしましたが、JDKの1.0.2がありません。書籍では1.1以降より1.0.2を最初に使った方がいいとありましたが、どうすればいいですか?

答え)おっしゃる通りで、探しても1.0.2が見つからなかったという方は多いかも知れません。ちょっとわかりにくいところにあるので、素直にリンクを辿っていくと1.1のダウンロードページにしか行き着けないようです。

http://java.sun.com/products/jdk/1.0.2/

ここに1.0.2はアップされていますので、直接このページにアクセスしてダウンロードして下さい。特にMacユーザーの場合は1.0.2しかありませんので、1.1のページにはJDKがアップされていませんので注意して下さい。



●Windows 95でJDKをダウンロードしてきたんですが、インストーラを起動すると、「なんとかDLLを書き換えますがいいですか?」といったような表示がされます。怖いのでインストールしてないんですが、これは何ですか?

答え)本書では、この点について触れていないので、インストール時にビビッてしまった人もいるかと思います。現在の1.1.5以降ではインストール時にWINSOCK.DLLというファイルを置き換えるようになっているようです。これはネットワーク関係で利用するダイナミックライブラリで、通常はそのままYキーを押して入れ替えてしまって問題はないはずです。DLLを置き換える場合、それまで使っていたものを必ずWINSOCK.OLDという名前でバックアップしているはずですので、もしインストールして何かトラブルが生じた場合は、WINSOCK.OLDに戻してみてください。



●面白そうなので買ってきましたが、これはCD-ROMがついてないんですね。普通はCD-ROMにリストのテキストとか収録しているのが普通だと思います。いちいち全部タイプするのは大変なのでリストのテキストをホームページにアップしてください。

答え)CD-ROMはわざとつけなかった、と考えてください。リストは全て自分で入力してもらうために、です。本書でも書いておきましたが、「プログラミングを覚える最善の道はとにかく書くこと」であるというのが私の考えです。ですから、ソースコードのテキストも敢えてアップはしません。どうぞ、全て自分でタイプしてください。自分で苦労して書いたソースコードが実際に動いた時の感動を読者の皆さんから奪うなんて、そんな残酷なことは私にはできません(笑)。




GO BACK
GO HOME