「JBuilderではじめるJavaプログラミング入門」追補情報 |
※これから購入しようと考えておられる方へ。
現在、本書は見直し作業を進めており、2002年秋にver. 7対応の改訂版として再出版する予定です。ここではMac OS XおよびWindows XPをベースとした形で書き直してあります。内容的にも、ファイルアクセス・スレッド・日付計算・オブジェクト配列といった事柄についてまとめた章を追加してあります。
★バグ・校正情報★ |
JBuilderの開発元であるインプライズ社は、2001年1月26日よりボーランド社と社名を変更しました。これに伴い、ホームページのURLも、「http://www.borland.co.jp/」に変更されています。
本書では、ライセンスキーの登録などをCD-ROMに付属のHTMLファイルにてホームページに移動し、行えるようになっていますが、URLの変更により、従来のURLではアクセスできなくなります。上記のURLに直接アクセスし、JBuilderのライセンス登録を行なうようにして下さい。
キャプションに「四角い枠線の部分が…」とあるのに、枠線が図につけてありません。本来は図のリスト表示されている部分に「void jButton1_actionperformd …」という行を囲むように枠線がつけられています。
「if (x % 2 = 0)」 → 「if (x % 2 == 0)」
条件の比較の==と代入の=が混同されて書かれています。ここは当然==となるべきでした。
「perseInt」 → 「parseInt」
なぜか、このあたり1ページほどにかけての部分だけ、parseIntが全てperseIntになっています。まあ、多用されるメソッドですから皆さんお気付きとは思うのですが…。
「《JOptionPane》.showMessageDialog …」 → 「《JOptionPane》.showConfirmDialog …」
showConfirmDialogのフォーム説明なのに、なぜかshowMessageDialogとなっています。読んで一瞬混乱した人もいるかと思いますが、これは書き間違いです。 219ページのフォームのまとめ部分も同様に書き間違っています。
「if ((x >= 0) …」 → 「if ((x > 0) …」
removeElementAtの条件部分で、0まで取りのぞきの処理がなされています。これは当然ですが1つまでしか実行はできません。
「0以上項目数以下」 → 「0以上項目数未満」
項目数以下だと、項目数そのものは含まれてしまいます。正しくは項目数は含まれません。
FontMetrics fm = this.getGraphics().getFontMetrics();
↓
FontMetrics fm = g.getFontMetrics();
ソースコードの間違いが見つかりました。といっても、このままでも別にエラーにはなりません。getGraphicsでGraphicsを取り出してgetFontMetricsを呼び出していますが、このメソッドではパラメータで既にGraphicsが渡されていますから、わざわざgetGraphicする必要はありません。P250のリストの一部を参照している部分では修正されていますから、おそらくリスト部分だけ古いソースか何かをうっかり使ってしまったのでしょう。
「jList1.setModel(jListModel1);」 → 「DefaultListModel jListModel1 = new DefaultListModel();」
参照の場所が間違っていました。その後に同じ行を参照しているので変に感じた方もいることでしょう。
「String s[] = new String[rnum];」 → 「String s[] = new String[cnum];」
列の数だけの要素を持った配列を作成している部分ですが、なぜか列数ではなく行数の変数rnumが使われています。これでは動作がうまくいきません。かなりコードの動作に関係する部分ですのでこれは大変申し訳ありませんでした。
「…getSelectedRowsでは{2,3,4}といった…」 → →「 …getSelectedRowsでは{1,2,3}といった…」
2〜4行が選択されていれば、配列は0から始まりますから1〜3番目が選択されていることになります。これもケアレスミスでした。
「charをStringにするのはキャストの指定だけですみますが・・」の部分
この部分、とても唐突なように感じたことでしょう。直前に、charからStringを得るのにメソッドを使う、という説明をしたすぐ後ですから。――この前に、「実は、charをStringにするには、メソッドなんて使わなくてもいいんですよ」という説明が入るべきなのです。
例えば、char型変数aがあるとき、「String x = "" + a;」というようにすればaのStringが変数xに得られます。そういうこともあるので、「charからStringを得るには、メソッドなんて使わない方法もいろいろあるけど、その逆は常になんらかのメソッドが必要ですよ」という説明につながる、のでした。
●校正ミス●
※P20 1つ目の図版の後3行目 「3.5の新機能」 → 「ver. 4の新機能」
※P44 表の中 「フィル」 → 「ファイル」
※P50 1-4-4 7行目 「Anyware」 → 「Anywhere」
※P81 2-2-7 2行目 「〜みめしょう」 → 「みましょう」
※P82 5行目 「方」 → 「型」
※90 3-1-1 6行目 「untitled.prj」 → 「untitled1.prj」
※P91 最下行 「Applet.java」 → 「Applet1.java」
※P112 3-2-5 5行目 「ActionLister」 → 「ActionListener」
※P115 1つ目の図版の次行 「数字と文字の変換(フォント)」 → 「数字と文字の変換(キャスト)」
※P122 乱数を返す「Random」 → 「random」
※P127 setLocationのまとめの例 「setBounds」 → 「setLocation」
※P239 手順4 「…を組み込みましょうインスペクタの…」 → 「…を組み込みましょう。インスペクタの…」
※P243 6-1-7 7行目「JListには、各項目の内容を…」 → 「JListには、各項目の表示内容を…」
※P243 中央付近 「暮らす変数」 →「クラス変数」
※P280 最後の「働き」2行目 「TreeSelectionListener」 → 「TreeExpansionListener」
※P283 6-4-2 2行目 「…をして別の処理に…」 → 「…をして別のセルに…」
※P288 リスト後2行目 「…実際に競るに…」 → 「…実際にセルに…」
※P342 まとめの「働き」部分 「…ウィンドウの最小化/… → 「…ウィンドウのクローズ/…」
※P342 「例」部分 「….setRresizable…」 → 「….setResizable…」
※現在まで確認できた間違いは以上です。もし、他に間違いが見つかりましたら、どうか御連絡下さいませ。
★FAQコーナー★ |
答え)JBuilderでアプレットを作成し、自動生成されたHTMLをWebブラウザで開いてみても、アプレットが実行されずエラーが表示されて驚いた人も多いことでしょう。――これは、Swingを使ったアプレット(すなわちJApplet継承のもの)であるためです。現在、IEなどのWebブラウザではJava2はサポートされておりません(Netscape
6ではサポートされました)。このため、そのままでは動かないのです。AWTベースのアプレットであれば、問題なく動きます。
ではSwingのアプレットは使えないのか、というとそういうわけでもありません。Swingアプレットを動かすには、一般的には「Java
Plug-in」を利用します。Java Plug-inというのは、Webブラウザなどで独自のJava機能を使ってアプレットを実行するためのものです。
これは、Java2(JDK 1.2以降)がインストールされていれば自動的に組み込まれます(コントロールパネルに「Java Plug-in」という項目が追加されるのでわかります)。またJDKをインストールしていない環境でも、Sunのサイトからプラグインだけをダウンロードすれば使えるようになります。
このプラグインを使ってアプレットを実行するには、通常のAppletタグではなく他のタグを書く必要があります。これは、かなり複雑なタグになってしまうため、自分で記述するのは難しいでしょう。
Sunでは、通常のAppletタグを使ったHTMLファイルを自動的にプラグイン対応に書き換える「HTML Converter」というプログラム(Java2で作られています)をフリー配付しています。Sunのサイトからダウンロードして、これを使ってHTMLファイルを変換して利用するのがよいでしょう。
Java Plug-in及びHTML Converterのアップロード先:
http://java.sun.com/products/plugin/ (※日本語ページも用意されています)
答え)これには要因はいくつか考えられます。まず、もっとも多いのが、Windows 98 SE以前のものを使っているというケース。Javaは、JDK
1.2(Java2)以降、IME 98がインストールされている場合にはIME 98 Service Releaseでアップデートしていないとうまく動きません。
また、比較的多いだろうと思われる要因に、ATOK等複数のInput Methodが組み込まれているという場合です。これは読者の方から御報告いただきました。ATOKをいったん外してインストールするとインストールできたとのことです。この他、Windows
2000でログインに全角名を使っている場合なども問題が発生するそうです。
JBuilderのインストールエラーについては、開発元であるインプライズ(現在、ボーランドと社名変更)のサイトにもFAQがありますので、そちらも参照して下さい。
インプライズ(現ボーランド)のJBuilder関連URL:
http://www.borland.co.jp/jbuilder/
答え) まだはっきりと原因はつかめてないのですが、「JDKでは動くのにJBuilderでエラーが出る」というような現象に遭遇したという報告が複数届いています。私自身、ビジュアルデザイナでエラーが出るが実行すると動く、というような現象に出くわしたことがあります。プログラム自体はJDKで問題なく動いているのに、JBuilderでは何かのエラーが出る、ということは稀にあるようです。
もしプログラム的に間違ってはいないのにJBuilderでエラーが出た、という場合は、JDKでコンパイルと実行ができるか確認してみて下さい。それで問題なく動けば、JBuilderの問題かも知れません。
答え) 「プログラムが動かない」という質問の内、半数以上がMyPanel関係でした。その多くに共通するのは、「プロジェクトを実行」メニューで動かしていた、ということです。HTMLファイルを開き、JBuilderのペイン内に表示して動かしてみると問題ない、ということのようです。
どうも、「プロジェクトを実行」だと動かないというケースがけっこうあるようです。確実な原因ははっきりしていないのですが、「プロジェクトの実行」だとJBuilderに内臓のappletviewerによってアプレットが実行されます。これに問題があるのでは?と思うのですが…。とりあえず、HTMLを内容ペインで開いて動作確認をして下さい。
答え)アプレットであれば、オンラインで使えますが、アプリケーションの場合はそうはいきません。またアプリケーションは多数のクラスファイルからなるのが普通ですし、MS-DOSプロンプトからJavaコマンドで実行しないといけません。これでは普通の人にはちょっと使えません。
現在、Javaアプリケーションの配布でもっともよいと思うのは「Javaアーカイブ」を利用した方法です。Javaアーカイブとは、Javaの専用アーカイブ(圧縮)ファイルで、JARというコマンドで作成します。また、Java2からは、「Excutable
Java Archive File」というものがサポートになっています。これは、Java2 SEやJRE(java Plug-in)がインストールしてあるWindowsマシンでは、EXEファイルのようにダブルクリックでJavaアプリケーションが起動できるようになるという仕組みです。
このExcutable Java Archive Fileの作り方については、このホームページの入門講座のコーナーにあるJavaの入門講座に、「番外編・Excutable
Java Archive」として説明してありますので、そちらを御覧下さい。
答え)この種の「○○に関する記述がないので教えて欲しい」というお問い合わせは非常に多くあるのですが、残念ながら全てにお答えすることはできません。「後は、他のもっと詳しい本を探して勉強して下さい」としか御返事できません。
Java(Java2)は、非常に多くの機能を持った言語です。本書で説明をしてあるのは、基本文法と、「Swing」と呼ばれるGUIライブラリの概略だけです。Java2の全ての機能について一通り説明するには、おそらく数千ページが必要となるでしょう。それぐらい、Java2は膨大な機能を持っているのです。
本書は、そのほんの触りだけを説明し、「Javaの世界というのがどんなものか、そのプログラミングはどのようなものか」という基礎について理解しよう、という主旨で執筆しました。ですから、「これ一冊でJavaの一通りがマスターできる」とは思わないで下さい。本書を了読したところで、ようやくスタート地点にたった、とお考え下さい。
答え)これは、おっしゃる通りです。本書はもともとver. 3.5の本として執筆していたのですが、出版の直前になって4が登場し、急遽書き換えたという経緯があります。その際、図版に関しては、表示が違っているものは全て取り直しましたが、細かな違いしかなく、ほぼ同じような画面はそのまま3.5の図を使うことにしました。このため、よく見るとver.
4の画面とは微妙に違っているものもあります。が、それらは全て操作や説明とは関係ないような些末な部分だけですので、学習に影響が出ることはないと思っています。どうぞご了承下さい。
答え)これは、ちょっと気づきませんでした。自分ではそういうつもりで書いたわけではないのですが、読み返してみると、確かにそう受け取れるかも知れないですね。switchは、単にcaseのラベルへとジャンプするだけの働きしかしません。ですから、breakがないと、その後のcaseにある文を全てずら〜〜〜っと実行していってしまいます。…まあ、breakしないswitchを書くことなんてまずありませんから、そこまで意識することはないでしょうが…。
答え)これは、確かにおっしゃるように混乱の元となっているかも知れません。ただ、そういう名前になってしまっているので、こればかりはなんとも…。
もともと「Pane」という英語は「四角い区画」といった意味ですから、そうした区画のようなオブジェクトは全部「なんとかペイン」とつけてしまってるんでしょう。プロジェクトペインのように、一種のインターフェイスとして扱われるペインは感覚的にわかりやすいでしょうが、コンテントペインは見えないものですから、それで「これは特殊なペインなのか?」という感じで考えてしまうのかも知れません。あまり細かく考えず、「四角い領域の部品はみんなペインと呼んじゃってるのだ」と大雑把にとらえた方がいいかも知れませんね。