tips: JAVA


一意なパッケージ名の取得

JAVA のプログラムを作成する際、 クラスが増えて来るとパッケージ化を行うかと思います。 個人的な開発をする限りにおいては任意のパッケージ名を使ってもとくに支障ありませんが 外部に公開したり、再利用したりするためにはパッケージ名が他のパッケージと競合しない =一意である必要があります。 多くの場合、パッケージ名は開発した団体のインターネットドメインを使用するのが通例となっており 言語仕様上も推奨されているようですが、 まだ個人レベルの開発者では独自のドメインを持たない場合も多いと思います。

このような開発者のために、日本では IAjapan(財団法人インターネット協会)の JAVA研究部会がパッケージ名の登録サービスを行っています。 このサービスに登録すれば、 JAVA研究部会のドメイン java-conf.gr.jp を用いて jp.gr.java-conf.xxx という一意なパッケージ名を使用できるようになります。

詳しくは
IAjapan JAVA 研究部会

投稿者 kyohei : 01:23 | コメント (0) | トラックバック (0)

MacOS X で起動する JAVA アプリケーション

もちろん JAVA で作成したプログラムは基本的にマルチプラットフォームですが 普通はコマンドラインで手動で起動しないといけません。 MacOS X の場合、必要なファイルを特定のディレクトリ構成に配置すれば ダブルクリックで実行できるようになるようです。
いまのところ自分の方ではうまくいっていませんが。

情報ソース:

投稿者 kyohei : 14:17 | コメント (0) | トラックバック (0)

JAVA での環境変数取得 & アプリケーション設定

JAVA においては環境変数の取得を System クラスの getProperty(ies) メソッドで取得できます。 また、アプリケーション独自の設定も、任意の *.properties ファイルを開き Properties クラスを利用することで、ファイル内の書式を意識せず ファイルに保存することが可能です。

詳細は

投稿者 kyohei : 02:27 | コメント (0) | トラックバック (0)

JAR ファイルを実行時に main メソッドが見つからない

原因その1:
JAR ファイルを実行した場合、どのクラスファイルに main メソッドがあるかを マニフェストファイルに指定する必要があります。
Main-Class: パッケージ名.クラス名
という行を追加してください。

原因その2:
非常に情けないのですが、この原因で小一時間悩みました。
マニフェストファイルに Main-Class を追加したにも関わらず実行できず、 よくよく考えてみたところ、パッケージ名の命名規則によると 大文字は使用してはいけませんでした。 名称をすべて小文字にしたところまったく問題なく動作しました。

投稿者 kyohei : 23:11 | コメント (0) | トラックバック (0)

JAR ファイル内に画像ファイルなどを含める

画像ファイルを JAVA プログラム内で使用する場合 とりあえず使うにはイメージ関連のクラス(Swing なら ImageIcon)のコンストラクタに ファイル名を渡せばよいですが、 この方法だと JAR ファイル化した時に画像ファイルを JAR ファイルに含められません。 (ファイル名指定だとファイルそのものを取得しようとするため)。

この場合、クラスローダーというクラスの getResource というメソッドを使用すれば 画像などのファイルを URL もしくは InputStream の形で取得できます。 クラスローダーは java の実行時に必要なクラスをクラスパスの JAR ファイルからロードするクラスです。 そして getResource メソッドを使用すれば、クラスファイルを取得するのと同じように JAR ファイルの中の画像を取得できます。

Swing の場合

ClassLoader classLoader = this.getClass().getClassLoader();
URL resUrl = loader.getResource("xxx.gif");
ImageIcon image = new ImageIcon(resUrl);

SWT の場合

Image image;
ClassLoader classLoader = this.getClass().getClassLoader();
InputStream iStream = classLoader.getResourceAsStream("xxx.gif");
if(iStream != null){
image = new Image(Display.getDefault(), iStream);
}

投稿者 kyohei : 22:37 | コメント (0) | トラックバック (0)

StringBuffer の文字列比較

非常に単純なことなのですが、JAVA を始めた際にしばらく気づかず苦労しました。
StringBuffer クラスのインスタンスの文字列を比較しようとした場合、 たとえば "aaa" という文字と等しいという条件を判断しようとした際

StringBuffer sb = new StringBuffer("aaa");
if(sb.equals("aaa")){ ... }

とすると条件式は false になってしまいます。 なぜかというと、sb は StringBuffer クラスなのですが "aaa" は String クラスのため、等しくないと判断されてしまうのです。
この場合

if(sb.toString().equals("aaa")){ ... }

とするとよいようです。

投稿者 kyohei : 22:17 | コメント (0) | トラックバック (0)