このページで解決しない高度なJavaのシステム障害はJaTSにお任せください

Trouble 15: eclipseに関する問題



<Q15-1>編集するクラスのファイルを簡単に探したい。

複雑なパッケージ構成
大きなシステムなのでパッケージ構成が複雑で、 パッケージエクスプローラーやナビゲーターでは編集するクラスを探すのが大変です。
もっと簡単にファイルを探せる方法はありませんか?

<発生環境>
JDK JDK1.4.1_05
Eclipse 2.1.1(日本語化済)
<A15-1>
以下の方法を使うと、エクスプローラーのツリーを辿ることなく、クラス名から直接ファイルを開くことができます。
※以下の環境で動作確認を行っています。
 ・Eclipse2.1.1(日本語化済)
 ・JDK1.4.1_05


【操作方法】

 1. Javaの編集画面(Javaパースペクティブ:図中①)で、メニューバーの「ナビゲート」→「型を開く」(図中②)を選択するか、Ctrl + Shift + t を押します。
「型を開く」を選択

 2. 「型を開く」ダイアログが開きます。
 3. 「型を選択してください」の欄に開きたいクラス名を入力します。
 4. 「マッチングする型」もしくは「修飾子」の欄から該当するクラスを選択して、OKボタンを押下します。
クラス名を入力

 5. 選択したクラスが開きます。
クラスが開きます。


「マッチングする型」の欄には、入力した段階まででマッチするクラス名が表示されます。
また、検索文字列は、"?"で任意の一文字、"*"で任意の文字列を表現できるので、クラス名の一部だけ分かっていれば検索可能です。
システムの階層が深い場合や、多数のパッケージで構成されている場合など、ツリーを辿るのが面倒な時に利用すると便利です。

Page Top

<Q15-2>編集するメソッドを効率よく探したい。

分かりにくいアウトライン
クラスの持つメソッドが多くなると、アウトラインからスクロールバーを動かしてメソッドを探すのが非効率です。
もっと効率よくメソッドを探す方法はありませんか?

<発生環境>
JDK JDK1.4.1_05
Eclipse 2.1.1(日本語化済)
<A15-2>
以下の操作で、キーボード操作によってメソッドを宣言している場所に直接ジャンプできます。
※以下の環境で動作確認を行っています。
 ・Eclipse2.1.1(日本語化済)
 ・JDK1.4.1_05


【操作方法】

 1. Javaの編集画面(Javaパースペクティブ)で、メニューバーの「ナビゲート」→「アウトラインの表示」を選択するか、Ctrl + o を押します。


 2. 画面上にポップアップでアウトラインが表示されます。


 3. ポップアップ上部の入力欄にジャンプしたいメソッド名を入力します。入力文字列は、"?"で任意の一文字、"*"で任意の文字列を表現できるので、メソッド名の一部だけ分かっていれば検索可能です。入力した段階まででマッチするメソッド名が、ポップアップ上の一覧に表示されます。
 4. 一覧から目的のメソッドを選択して、Enter を押します。


 5. 選択したメソッドにジャンプします。



上記の操作はメソッドだけでなく、フィールドも含めたメンバに対して適用できます。
このように操作することで、アウトラインビューのツリーを辿ったり、通常の文字列検索で探すよりも効率よく目的のメソッドを表示することができます。
Page Top

<Q15-3>eclipseを日本語化したい。

英語表示のeclipse
eclipseを日本語化したいのですが、どのようにすればいいですか?

<発生環境>
OS Windows
JDK JDK1.4.1_05
Eclipse 2.1.2
<A15-3>
eclipse.org にて正式に日本語化パッチ(注1)が配布されています。
ここではその利用方法について説明します。
※以下の環境で動作確認を行っています。
 ・Eclipse2.1.2
 ・OS:Windows
 ・JDK1.4.1_05


【前提】

eclipse2.1.2が正常にインストールされていること。

【日本語化パッチの取得】

 1. まずはファイルを取得します。eclipse.org内のhttp://www.eclipse.org/downloads/index.php を開きます。

 2. 「Main Eclipse Download Site」→最下段「Language Packs」の「2.1.2_Translations」と進むと、Windows用日本語化パッチ、「eclipse2.1.2.1-SDK-win32-LanguagePackFeature.zip」をダウンロードできます。(注2

【日本語化パッチの適用】

 1. 次はパッチの適用です。取得したzipファイルを解凍します。
 2. 解凍すると、eclipseフォルダにfeaturesフォルダとpluginsフォルダがあります。
featuresとpluginsを上書きする
 3. 上記の2フォルダを、eclipseインストールフォルダのfeaturesフォルダとpluginsフォルダそれぞれに上書きします。
 4. eclipseを起動すると、構成変更のダイアログが開きます。そのまま終了し、eclipseを再起動します。
構成変更のダイアログ
 5. eclipseが再起動されたら日本語化が完了です。
日本語化されました。


※注1: 正確には、複数の言語に対応した、国際化パッチとなっています。
※注2: eclipseと国際化パッチのバージョンは随時更新されています。最新のバージョンは「Main Eclipse Download Site」の最上段、「Latest Downloads」にて確認することができます。
使用しているeclipseと同じバージョンの国際化パッチを使用して下さい。
Page Top

<Q15-4>try~catch を簡単に記述したい。

例外処理前。簡単にtry~catch文を記述したい
例外処理を丁寧に行おうとすると、いくつもtry~catch文を記述することになります。
ブロックで囲む範囲を変更するのも、数が多くなると非常に面倒です。
複数の例外が発生するコードでは、漏れがないように気を使うのも大変です。
もっと簡単にtry~catch文を記述することはできませんか?

<発生環境>
OS Windows
JDK JDK1.4.1_05
Eclipse 2.1.2
<A15-4>
マウス一つで簡単にtry~catch文を記述する方法を説明します。
※以下の環境で動作確認を行っています。
 ・Eclipse2.1.2
 ・OS:Windows
 ・JDK1.4.1_05


【操作方法】

 1. Javaソースファイルの例外処理を記述したい範囲を選択します。
範囲を選択

 2. エディター上にマウスカーソルを重ね、右クリック→「ソース」→「try/catchブロックで囲む」を選択します。範囲を選択した状態でメニューから「ソース」→「try/catchブロックで囲む」でも同様の処理となります。
ポップアップから「try/catchブロックで囲む」を選択

 3. 選択範囲がtry~catch文で囲まれます。
マウス一つでtry~catch文の記述ができました。


catchブロックは選択範囲からthrowされる例外の数だけ生成されます。RuntimeExceptionも自動判別でcatchしてくれるので、例外処理の記述漏れを減らすことができます。これで、安易に、
 try
 {
     ~
 }
 catch(Exception e)
 {
     ~
 }
のようなコードを書いてしまう危険性も減らすことができます。
Page Top

<Q15-5>自動生成されるcatchブロックの内容を変更したい。

デフォルトのcatchブロック内のコード
20-4で紹介されたtry~catchの自動生成を使っています。
確かに便利なのですが、catchブロック内に自動で出力されるコードをカスタマイズできたらもっと便利なのに、と思います。
トレース出力用コードなど、必ず記述する処理を自動生成させることはできませんか?

<発生環境>
OS Windows
JDK JDK1.4.1_05
Eclipse 2.1.2
<A15-5>
設定を変更することで、自動生成時に出力されるコードの内容をカスタマイズすることができます。try~catchだけでなく、新規クラスを生成した際のヘッダーコメントやコンストラクタなども、自動生成時の出力内容を自由に設定できます。ここでは前回紹介したtry~catchの自動生成を例にとって説明します。
※以下の環境で動作確認を行っています。
 ・Eclipse2.1.2
 ・OS:Windows
 ・JDK1.4.1_05


catchブロックの自動生成では、デフォルトでコメントとprintStackTrace()が記述されます。
これを編集することで、好きな定型コードを自動生成することができます。

【操作方法】


 1. メニューから「ウィンドウ」→「設定」から設定ダイアログを開き、「Java」→「コード生成」を選択します。
設定ダイアログ

 2. 「コードとコメント」タブの中の「catchブロック本体」を選択し、「編集」ボタンをクリックします。
コードとコメントタブ

 3. テンプレートの編集ダイアログにて、デフォルトのコードを編集し、定型コードを記述しておきます。編集が終わったら「OK」ボタンをクリックしてダイアログを閉じます。同じく「OK」ボタンをクリックして設定ダイアログも閉じます。
テンプレートの編集ダイアログ

 4. 20-4で紹介した要領でtry~catch文を生成すると、catchブロック内に編集したコードが記述されます。
カスタマイズコードが出力されました。

これ以外に定型コードを設定する方法として、1の設定ダイアログの中の「Java」→「エディター」→「テンプレート」にて設定する方法(20-6参照)があります。こちらも設定の要領は同じですので、ぜひ試してみてください。
Page Top

<Q15-6>オリジナルの定型コードを簡単に記述したい。

オリジナルの定型コードを自動生成したい
try~catchなどの基本構文以外にも、定型コードを書くことがあります。
コピーでもいいですが、数が多いと面倒です。
オリジナルの定型コードを自動生成させる方法はないでしょうか。

<発生環境>
OS Windows
JDK JDK1.4.1_05
Eclipse 2.1.2
<A15-6>
20-5の最後で紹介した「テンプレート」機能を使うと、オリジナルの定型コードを登録して、簡単に生成することができます。トレース出力コードを例にとって説明します。
※以下の環境で動作確認を行っています。
 ・Eclipse2.1.2
 ・OS:Windows
 ・JDK1.4.1_05


【操作方法】

 1. メニューから「ウィンドウ」→「設定」から設定ダイアログを開き、「Java」→「エディター」→「テンプレート」を選択し、「新規」ボタンをクリックします。
設定ダイアログ

 2. 「新規テンプレート」ダイアログが開きます。出力させたいコードを「パターン」に、出力させるためのトリガーとなる文字列を「名前」に入力します。「説明」にはテンプレートの説明を記述してください。編集が終わったら「OK」ボタンをクリックしてダイアログを閉じます。同じく「OK」ボタンをクリックして設定ダイアログも閉じます。
新規テンプレートダイアログ

 3. エディター上で、2で入力した名前を記述し、Ctrl+Spaceを押してください。画面上にポップアップが表示されるので、該当する項目を選択します。(他に選択肢がない場合はポップアップは表示されずに、直接出力されます。)
Ctrl+Spaceでこのポップアップが開く

 4. 登録した定型コードが出力されます。
登録した処理が自動生成されます。


2の編集画面にて、「${cursor}」という記述があります。これはコード生成後のカーソルの位置を指定する変数です。2の編集画面中の、「変数の挿入」ボタンをクリックすれば、他にも様々な変数を挿入することもできます。これを利用すると、動的に生成コードの内容を決定することができるので、 汎用性の高いテンプレートを作成することも可能です。 ぜひ試してみてください。
Page Top

<Q15-7>複数のアクセッサを一括で生成したい。

アクセッサを一括で生成したい
多数のフィールドを持つクラスを作ると、アクセッサを実装するのも一苦労です。
宣言したフィールドのアクセッサをまとめて生成することはできませんか?

<発生環境>
OS Windows
JDK JDK1.4.1_05
Eclipse 2.1.2
<A15-7>
クラス中に宣言されたフィールドに対して、必要なアクセッサだけを選択して一括生成することができます。
※以下の環境で動作確認を行っています。
 ・Eclipse2.1.2
 ・OS:Windows
 ・JDK1.4.1_05


【操作方法】

 1. エディター上のclassブロック内(注1)にフォーカスがある状態で、メニューから「ソース」→「Getter および Setterの生成」を選択します。右クリック→「ソース」→「Getter および Setterの生成」を選択しても同様です。
 ※注1: Javadocコメントの開始位置からブロックが閉じられるまでを指します。
「Getter および Setterの生成」を選択

 2. 「Getter および Setterの生成」ダイアログで、生成したいGetter/Setterにチェックをつけ、「OK」ボタンをクリックします。フィールド名のチェックボックスをチェックすると、Getter/Setter両方を一度にチェックできます。
生成したいアクセッサにチェックをつける

 3. コードの末尾に、選択したアクセッサが自動生成されます。
アクセッサが生成されました。


【更に便利な使い方】

プロジェクトのコーディング規約で、フィールドのサフィックスとしてアンダースコアを付加するなどの命名規則がある場合があります。このような場合、これらのフィールドに対して上記の操作をすると、通常はアクセッサにも文字/記号が付加されてしまいます。

ex) フィールド : int stateValue_
   アクセッサ : getStateValue_(), setStateValue_(int i)

これらの文字をメソッド名に付加したくない場合は、次のように設定します。

 1. メニューから「ウィンドウ」→「設定」を選択して「設定」ダイアログを開き、「Java」→「コード生成」→「名前」タブ→「フィールド」を選択して「編集」ボタンをクリックします。
「フィールド」を編集

 2. 「フィールド命名規則」ダイアログにて「接尾部リスト」(または「接頭部リスト」)にフィールドの付加文字(上記の例では「 _ 」)を記述して、「OK」ボタンをクリックします。
「フィールド命名規則」ダイアログ

 3. これで、メソッド名には該当する文字が付加されなくなります。
メソッドには「 _ 」が付かなくなりました。
Page Top

<Q15-8>思いついたJavaコードをすぐに実行したい。

思いついたコードをすぐに実行したい
コーディング中、ループや条件文のネストが深くなってしまうときなど、ちょっと動かして動作確認したい!と思うことがあります。ですがmainメソッドを書くのも面倒だし、スクリプト言語のように一部分だけですぐに実行できたらいいのですが・・・
何とかなりませんか?

<発生環境>
JDK JDK1.4.1_05
Eclipse 2.1.2(日本語化済)
<A15-8>
eclipseでは、Javaコードを一部分だけ抜き出して実行することができます。
※以下の環境で動作確認を行っています。
 ・Eclipse2.1.2(日本語化済)
 ・JDK1.4.1_05


【操作方法】

 1. メニューから「ファイル」→「新規」→「スクラップブック・ページ」を選択します。
「スクラップブック・ページ」を選択

 2. ダイアログで任意のファイル名を指定して、「OK」をクリックすると、「.jpage」という拡張子のファイルが作成されます。
ファイル名を指定

 3. 作成されたjpageファイルに、実行したいjavaコードを記述します。
.jpageファイルに実行したいコードを記述

 4. インポートするクラスがある場合は、import文を記述する代わりに、スクラップブックエディター上で右クリックして、「インポートの設定」を選択します。ダイアログから必要なクラスをインポートします。
「インポートの設定」を選択インポートするクラスを選択

 5. 実行したいjavaコードを選択して右クリックし、「実行」を選択します。
右クリック→「実行」を選択

 6. 結果が表示されます。
mainメソッドが無くても実行できました。

サンプルクラスを定義したり、mainメソッドを作ることなく、 思いついたコードをすぐに実行して、結果を確認できます。 また操作方法の5にて「インスペクション」や「表示」を使うとデバッグ時と同様に オブジェクトの内部を見ることもできます。

コードの一部分だけ動作確認したい場合や、簡単なプロトタイピングなどに 利用してみてはいかがでしょうか。
Page Top

<Q15-9>ソースに直接記述していた文字列を外部ファイル化したい。

文字列を外部化したい
アプリケーションを国際化対応するため、エラーメッセージなど、これまでハードコーディングしてきたメッセージをリソースバンドルを使用して外部化し、切り換えられるようにすることになりました。
とはいえアプリケーション中の全ての文字列を外部化するだけでも大変な作業です。プロパティを取得するためのクラスも用意しなくては・・・
何とか簡単に出来ないでしょうか。

<発生環境>
JDK JDK1.4.1_05
Eclipse 2.1.2(日本語化済)
<A15-9>
ソース中の文字列を外部のプロパティファイルとして取り出し、かつ、そのプロパティへのアクセッサクラスも自動生成することができます。
※以下の環境で動作確認を行っています。
 ・Eclipse2.1.2(日本語化済)
 ・JDK1.4.1_05


【操作方法】

 1. 文字列を外部化したいクラス、もしくはパッケージを選択します。

 2. クラスを選択した場合は、右クリックメニュー→「ソース」→「ストリングの外部化」、パッケージを選択した場合は「外部化するストリングの検索」を選択します。
クラスを選択して「ストリングの外部化」

 3. 「ストリングの外部化」ダイアログで、外部化する文字列、外部化する際のキーとその接頭部、プロパティファイル名と出力先パッケージ、アクセッサクラス名などを設定します。プロパティファイルの出力先パッケージは、既存パッケージの中から選択します。また、デフォルトのプロパティファイル名は「message.propaties」、アクセッサクラス名は「Messages.java」となっています。
「ストリングの外部化」ダイアログ

 4. 操作3で選択したパッケージにプロパティファイルが、外部化対象クラスと同じパッケージにアクセッサクラスが、それぞれ新規に自動生成され、ハードコーディングされていた文字列がプロパティファイルに書き出されます。

 ◆プロパティファイル
生成されたプロパティファイル
 ※外部化対象の文字列が2バイトコードの場合、プロパティファイル中での文字列は、Unicodeの16進表記に変換されています。

 ◆アクセッサクラス
生成されたアクセッサクラス

 ◆文字列の外部化後のクラス
ストリングが外部化されました。

ハードコーディングされている文字列を外部化し、プロパティファイルで管理するように変更したい場合、この機能を使えば非常に簡単に行うことが出来ます。

この機能は、アクセッサクラスも生成してくれ、かつ元のプログラムは生成したアクセッサクラスを使用して、プロパティファイル中のメッセージを出力するように変更されます。そのため、プロパティファイルを変更するだけで、プログラムを変更せずにメッセージを切り換えることができるようになるのです。

プログラムの国際化対応の他、JDBCにおけるSQL文の変更などにも役立つのではないでしょうか。
Page Top

<Q15-10>長いパッケージ名を省略して表示したい。

長いパッケージ名を省略して表示したい。
パッケージ名が長くなると、パッケージエクスプローラの表示が幅を取ってしまいます。 パッケージ名の末尾は見えていないとファイルが探しにくいですが、末尾まで表示させておくと幅が広くなるので肝心のエディター部が狭くなってコーディングに不便です。 ちょっとしたことなのですが、このパラドックス、何とかならないでしょうか。

<発生環境>
JDK JDK1.4.1_05
Eclipse 2.1.2(日本語化済)
<A15-10>
パッケージ名の各階層(末端以外)の文字列を省略して表示することができます。
※以下の環境で動作確認を行っています。
 ・Eclipse2.1.2(日本語化済)
 ・JDK1.4.1_05



【操作方法】

 1. メニューから「ウィンドウ」→「設定」で設定ウィンドウを開きます。

 2. 「Java」→「外観」→「最終セグメントを除く、すべてのパッケージ名セグメントを圧縮」にチェックをつけます。

 3. 圧縮パターンを入力します。圧縮パターンの記述方法については後述します。
「最終セグメントを除く~」をチェックし、圧縮パターンを記述

 4. パッケージエクスプローラのパッケージの表示が、末端の階層を除いて省略形になります。
パッケージ名の表示が省略されました


【圧縮パターン】

省略するパッケージ名を「jp.co.Acroquest.homepage.java.jtssample.eclipse」として、圧縮パターンによる省略のされ方を紹介します。

 1. 圧縮パターン「.」(ピリオドのみ)
......eclipse
 パッケージの各階層が「.」で置き換えられています。末端の階層だけ分かればいい時に使うと、画面がすっきりすることと思います。

 2. 圧縮パターン「3.」
jp.co.Acroquest.hom.jav.jts.eclipse
 パッケージの各階層が、先頭3文字で表示され、区切りに「.」が入っています。3文字以下の階層はそのまま表示されます。

 3. 圧縮パターン「2~.」
jp.co.Acroquest.ho~.ja~.jt~.eclipse
 パッケージの各階層が、先頭2文字で表示され、その後ろを「~」で置き換え、さらに区切りに「.」が入っています。もともと3文字なために「~」で置き換えても文字数が変わらない「Acroquest」の部分は、変更されません。


規模の大きな開発になるほどパッケージ名が長く、数も膨大になりますが、 パッケージ名の前半は複数のパッケージに共通であることが多いものです。 こうしたパッケージは、思い切って短く省略することで、 作業画面の閲覧性が向上します。

見やすい画面で、快適な開発をお楽しみください。
Page Top

<Q15-11>ローカル変数の名前を簡単に変更したい。

ローカル変数の名前を簡単に変更したい。
変数名を変えるときはリファクタリングをよく使っています。 とはいえ、2,3個しかないようなローカル変数にいちいちリファクタリングのウィンドウを開くのも大げさです。 そうは言っても、一つ一つ変更するのはやっぱり面倒。もっとお手軽な方法はないでしょうか。

<発生環境>
JDK JDK1.4.1_05
Eclipse 2.1.2(日本語化済)
<A15-11>
ローカル変数の名前を、エディター上でまとめて変更することができます。
※以下の環境で動作確認を行っています。
 ・Eclipse2.1.2(日本語化済)
 ・JDK1.4.1_05



【操作方法】

 1. 変更したい変数にカーソルを合わせて、「Ctrl」 + 「1」を押します。

 2. ポップアップから「ローカル名前変更」をダブルクリックします。
「ローカル名前変更」をダブルクリック

 3. 編集モードになるので、名前を変更します。
「sum」を編集すると・・・
ローカル変数「sum」を編集すると・・・

エディター上の全ての「sum」が・・・
エディター上の全ての「sum」が・・・

全体がエディター上で変更される
同時に変更されます。

 4. 変更後、enterで確定します。
名前が変更されました。

この操作は、ローカル変数に限らず、同名の変数、メソッド、型を変更することができます。ただし、一つのファイル内でしか変更はできないので、クラス名やpublicメソッドなど他のファイルから参照されるものの場合は注意してください。

リファクタリングよりも操作手順が少ないので、慣れればより簡単に名前を変更することができます。 ローカル変数や、privateメソッドなどの名前変更に利用すると、便利なのではないでしょうか。
Page Top

注意:本文書の内容に誤りがあり、またこの文書によって不利益を被っても、
Acroquest Technology 株式会社は一切関知いたしません。

  • 現象別Index
  • 原因別Index

Find Bugsバグ詳細

Find Bugs Bug Descriptions日本語版

RSSで更新情報を取得する

RSSとは、ホームページの更新情報を配信する為のフォーマットです。
RSSを利用すると、登録したページの情報が更新された場合に、更新情報を自動的に受け取る事ができます。

詳細

弊社小森が執筆致しました

Javaでオブジェクト指向開発

Javaプログラミング言語習得において、新人プログラマーの最初の障害は「オブジェクト指向の壁」です。
本書は、Javaのソフトウェア開発を中心に事業を発展させてきたAcroquest社の新人教育セミナーを加筆・書籍化したもので、大卒の新人に対して、ゼロからJava言語を教えてきた実績をフィードバックしています。

メールマガジン配信中

Javaトラブルシューティングのメルマガをはじめました!是非ご購読ください

詳細