MavenにおけるJAVA_HOME設定エラー Error: JAVA_HOME is set to an invalid directory.

Mavenをインストールしてから、コマンドプロンプトにて
mvn --version

を実行すると、次のエラーメッセージに見舞われた。

Error: JAVA_HOME is set to an invalid directory.
JAVA_HOME = "C:\Program Files\Java\jdk1.8.0_92\bin"
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation.


JAVA_HOME = "C:\Program Files\Java\jdk1.8.0_92\bin"
というのが環境変数に設定していた値なのだが、末尾の"bin"があると上手くいかないようだ。

環境変数の JAVA_HOME の値を
"C:\Program Files\Java\jdk1.8.0_92"
とすると、"mvn --version"コマンドが正常に動作した。

posted by へっぽ at 01:31 | TrackBack(0) | java | このブログの読者になる | 更新情報をチェックする

cacertsの証明書一覧を見る

javaでは主要な証明書が予めインストールされたkeytoolが付いている。 
場所は jre/lib/security/cacerts

何がインストールされているかを見るコマンドは
keytool -v --list -keystore cacerts

posted by へっぽ at 00:38 | TrackBack(0) | java | このブログの読者になる | 更新情報をチェックする

java Calendar.MONTHの罠

javaでCalendarのインスタンスを取得し、月を表示してみたところ、 
なぜか一ヶ月前が表示される。

-------------------サンプルコード-------------------
Calendar cal = Calendar.getInstance(); 
System.out.println(cal.get(Calendar.MONTH)); 
----------------------------------------------------------

8月に実行すると「7」と表示されます。

なんでだーー??と思って調べたところ、Calendarクラスの 
MONTHは0から11までの値を取る為。 
なので、これで月をとりたければ+1しなければ 
ならないのです。

以下、javadocより抜粋 
------------------------------------------------------------------------------------------------------------------ 
get および set のための、月を示すフィールド値です。これはカレンダ固有の値です。 
年の最初の月は JANUARY で 、0 となります。 
最後の月は、1 年の月の数によります。 
------------------------------------------------------------------------------------------------------------------

なるほど。

これで、Calendar#getTime()でDate型に変換したときは現在の月が 
ちゃんと取れるのに…という疑問も無事晴れました。

posted by へっぽ at 07:09 | TrackBack(0) | java | このブログの読者になる | 更新情報をチェックする

Apache2.2とTomcat6を連携する方法

Apache2.2で接続を受け、Tomcatで処理を行うなど、 
両者を連携するための方法です。

OS: Windows XP

□Apache2.2の設定

  ・conf\httpd.confの設定

    以下のコメントアウトを外す。

    #LoadModule proxy_module modules/mod_proxy.so

    #LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

  ・Locationディレクティブの設定

    以下のようにProxyPass ajp://localhost:8009/sample/を設定する。

    <Location /sample > 
      ProxyPass ajp://localhost:8009/sample/ 
    </Location >


□Tomcat6の設定

  ・conf\server.xmlの設定

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
の記述があるかを確認する


□サービスの起動

  ・Tomcat→Apacheの順にサービスを起動する

posted by へっぽ at 11:00 | TrackBack(0) | java | このブログの読者になる | 更新情報をチェックする

String.valueOfの罠

String#valueOf(Object obj)って、nullが入ればNullPointerExceptionでも投げてくれるものだと思っていました。

結果: 
String value = String.valueOf(null) 
System.out.println(value) -> 「null」と出力される 
System.out.println(value.length()) -> 「4」と出力される

String.valueOfにnullを入れると、文字列"null"扱いになるとは…

確かにJavaDocに以下のような記述が。 
******************************************************************************** 
public static String valueOf(Object obj) 
  Object 引数の文字列表現を返します。

  パラメータ: 
    obj - Object 
  戻り値: 
    引数が null の場合は、"null" に等しい文字列。そうでない場合は、obj.toString() の値 
********************************************************************************

posted by へっぽ at 19:46 | TrackBack(0) | java | このブログの読者になる | 更新情報をチェックする

nano秒の取得

Javaでナノ秒の時間間隔を取る方法を調査。


System#nanoTime()で取得可能。


但し経過時間を計測するためだけに使用できます。
現在時刻としては使えません

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/System.html#nanoTime()

posted by へっぽ at 01:53 | TrackBack(0) | java | このブログの読者になる | 更新情報をチェックする

テスト規約

Junitでテストケースを作成する際の一般的(?)な規約をメモ。

・テストメソッド名は「test+メソッド名+連番」とする
・テストクラス名は「対象クラス+Test」とする
・一つのテストメソッドには一つのテストケースのみ
・テストクラスのパッケージは対象クラスと同一。
・各テストメソッドにはthrows Exception
posted by へっぽ at 09:40 | TrackBack(0) | java | このブログの読者になる | 更新情報をチェックする

[Java] Jad



ソースを逆コンパイルしたいときに使うものといえばJadが有名です。

この前までこのURLから取得できましたが、現在は消えてしまっているようです。

現在はInternet Archiveから取得できます。

使い方は(Windowsでは)コマンドプロンプト上で、逆コンパイルしたい .class ファイルのあるフォルダをカレントディレクトリとし、

jad [クラス名]

でOK。

posted by へっぽ at 01:54 | TrackBack(0) | java | このブログの読者になる | 更新情報をチェックする

[Java] Java DB



Java DBとは Java6 から新しく追加されたデータベース機能。


データベースが丸ごと Java に取り込まれているので、外部にデータベースを用意することなく、データベース機能を利用することができる。


もともとApache Foundationが pure Java で開発していたDerbyというデータベース機能を、Java6が取り込んだ。


使い方の例は

http://codezine.jp/article/detail/1556
http://allabout.co.jp/internet/java/closeup/CU20070119A/

などを参照。

posted by へっぽ at 20:38 | TrackBack(0) | java | このブログの読者になる | 更新情報をチェックする

[Java] ビープ音



Javaでビープ音を鳴らしたいと思いました。

Cでは確か"\a"で鳴ったような…けどJavaではうまくいかない。

どうやらJavaでは

java.awt.Toolkit.getDefaultToolkit( ).beep( );

で鳴るというので試してみましたら。


これ、ビープ音か?


ビープ音といえば「ビーッ」っていうのを期待してましたが、
なんか「ポン、ポン、ポン」て(笑)

試した環境は Windows XP なんで、他の環境ではどうなるか未知ですが…

そういえば

System.out.print( '\u0007' );

でも高い音が鳴ると聞きましたが、こちらでは何も起こりませんでした(TT)

これも環境依存みたいです。よくわかりませんが。

posted by へっぽ at 22:00 | TrackBack(0) | java | このブログの読者になる | 更新情報をチェックする

[Java] ThreadLocal



マルチスレッド・プログラミングを行なうときに注意しなければならないのは、スレッド間での変数の競合。

つまり、あるスレッドがある変数を使用しているときに、別のスレッドがその変数を書き換えてしまうような場合。

再現の困難なバグとなってしまいます。


synchronized により競合を防ぐこともできますが、あるスレッドがその変数を使用している間、別のスレッドの待ちが発生するため、パフォーマンスの劣化が生じます。


このような場合に有効なのは、スレッド毎に別々の変数を用意するという方法です。

Java ではこのような構造をThreadLocalで実現します。

スレッドが終了すると、保持していた変数は GC の対象となります。

posted by へっぽ at 22:50 | TrackBack(0) | java | このブログの読者になる | 更新情報をチェックする

[Java] PC起動と同時にJavaプログラムを開始する



PC起動と同時に、JavaのGUIプログラムを起動する手順です。

OSはWindows XPとして解説してます。

Windows の「タスク」機能を使用します。

@「スタート」→「すべてのプログラム」→「アクセサリ」→「システムツール」→「タスク」を選択します。

A「タスクウィザード」が開くので「次へ」をクリックします。

B実行するプログラムを選択します。あとで変更するのでどれでも構いません。
「次へ」をクリック。

Cタスクの名前を変更し、「このタスクの実行:」欄で「コンピュータ起動時(S)」を選択します。
「次へ」をクリック。

Dユーザー名とパスワードを入力します。
(ログオンするユーザにパスワードを設定していないと、タスクを実行できません。)
「次へ」をクリック。

E「[完了]をクリックしたときに詳細プロパティを開く」にチェックを入れ、「完了」をクリックします。

F「タスク」タブの「実行するファイル名」に次のように入力します。
javaw -cp [クラスパス] [クラス名]

G同じく「タスク」タブの「開始(T)」欄に、実行するプログラムのあるフォルダを入力します。

以上で、コンピュータ起動時にプログラムが実行されます。


posted by へっぽ at 21:48 | TrackBack(0) | java | このブログの読者になる | 更新情報をチェックする

[Java] GCViewer



メモリの使用状況を調べる方法。

Javaの起動オプションに -Xloggc:<ファイル名> と指定して実行すると、<ファイル名>で指定したファイルにGCログを取得できます。


このままだと見づらいので、GCViewerを使ってグラフにします。


GCViewerの起動は下記コマンドです(ver 1.29を使ってる場合)。

java -jar gcviewer-1.29.jar


すると、最大のヒープサイズが赤で、使用中のヒープサイズが青で、時系列で示されますので、これでメモリリークがないかなどを調べることができます。

posted by へっぽ at 22:49 | TrackBack(0) | java | このブログの読者になる | 更新情報をチェックする

[Java] コマンドプロンプトを表示することなく、Javaプログラムをスケジュール起動する



JavaでGUIプログラムを作りました。

ちなみにOSはWindows XPです。

swingで作成したのですが、コマンドプロンプトから『 java [クラス名] 』で実行すると、コマンドプロンプトもずっと表示されているので、なかなかカッコ悪い。。。


そこで、コマンドプロンプトを表示させずに、Javaプログラムを起動するための方法です。

コマンドプロンプトを表示させずにJavaプログラムを起動するには、『javaw』コマンドを使って次のように設定します。


@デスクトップでもどこでもいいので、右クリック→「新規作成」→「ショートカット」を実行します。

A「項目の場所を入力してください」欄に次のように入力します。

javaw -cp [クラスパス] [クラスファイル名]

例えば、クラスパスに C:\Java\lib\Sample.jar を設定し、Sample.class を起動したい場合は次のように入力します。

javaw -cp C:\Java\lib\Sample.jar Sample

※クラスパスに「Document and Settings」など、スペースが含まれる場合は、ダブルクォーテーション「"」で囲みます。

Bショートカットに好きな名前を付けて、「完了」をクリックします。

C出来上がったショートカットを右クリックし、「プロパティ」を選択します。

D「作業フォルダ」欄に、ショートカットを起動するフォルダを入力します。


これで、ショートカットをダブルクリックすれば、Javaプログラムが起動します。




posted by へっぽ at 23:13 | TrackBack(0) | java | このブログの読者になる | 更新情報をチェックする

[Java] 条件分岐の判定順に注意



何気なく書いた条件分岐でつまずいてしまいました。

int型の配列 『index』 について、以下のような条件分岐があったとします。

・index.length==0またはindex[2]==3ならばループを抜ける

この場合、index.length == 0 とかだったりすると

for ( … ) {
  if ( index[2]==3 || index.length==0 ) break;
}

と書くとNullPointerExceptionが発生する。

けど、

for ( … ) {
  if ( index.length==0 || index[2]==3 ) break;
}

ならOKらしい。

if()の中の条件判定にも順番があるんですね。


posted by へっぽ at 00:23 | TrackBack(0) | java | このブログの読者になる | 更新情報をチェックする

[Java] 文字列結合のパフォーマンス



Strnig型の文字列は「+」演算子で結合することが可能ですが、

繰り返し処理するような場合は実行速度の面で非常に悪さをします。

繰り返し文字列を結合するような場合はStringBufferのappendメソッドを使うべきと言われます。

以下のようなソースコードで実験したところ、StringBufferのappendは
Stringの結合の数千倍の速度でした。

実際に実験するとわかりますが、Stringの方は遅くて耐えられません…



String str = "hogehoge";

String result = "";

StringBuffer buffer = new StringBuffer( );

// String の + 演算で結合

for ( int i = 0; i < 20000 ; i++ ) {

 result += str;

}

// StringBuffer の append メソッドで結合

for ( int i = 0; i < 20000; i++ ) {

 buffer.append( str );

}




posted by へっぽ at 21:52 | TrackBack(0) | java | このブログの読者になる | 更新情報をチェックする

[Java] ListからString[]への変換



List型の変数をString型の配列へ変換する方法です。

List の toArray メソッドを使用します。
以下、ソースコード。


// List型の変数listを定義します

List list = new ArrayList();

list.add("aaa");

list.add("bbb");

list.add("ccc");

// toArray メソッドを使って、list をObject[]へ変換します

// toArray の引数は、変換先となる String[] です

Object[] objs = list.toArray(new String[list.size()]);

// Object[] を String[] へ型変換します

String[] strs = (String[])objs;



これで List型のlistが、要素数3 のString型配列として扱われます。

strs[0] = "aaa", strs[1] = "bbb", strs[2] = "ccc"となります。


posted by へっぽ at 16:58 | TrackBack(0) | java | このブログの読者になる | 更新情報をチェックする

[Java] charからStringへの変換



char型をString型へ変換する方法

Character の toString を使います。
以下、ソースコード。

// char型のchを定義します

char ch = 'a';

// Characterクラスのインスタンスcharacterを生成します
// コンストラクタの引数には、さっき作ったchを代入します

Character character = new Character ( ch );

// character の toStringメソッドを使って変換します
// 変換結果をString型のstrへ代入します

String str = character.toString();

これで文字だった'a'が、"a"という文字列として扱われます。


posted by へっぽ at 15:22 | TrackBack(0) | java | このブログの読者になる | 更新情報をチェックする

[Java] intからStringへの変換



int型の変数をString型の変数へ変換する方法です。

  1. Integer の toString メソッドを使う方法

    int i = 256;

    String str = Integer.toString(i)



  2. String 型へ代入する方法

    int i = 256;

    String str = "" + i



これで整数値だった256が、"256"という文字列として扱われます。


posted by へっぽ at 15:05 | TrackBack(0) | java | このブログの読者になる | 更新情報をチェックする

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。