ラベル Java の投稿を表示しています。 すべての投稿を表示
ラベル Java の投稿を表示しています。 すべての投稿を表示

2014年4月12日土曜日

「Failed to create the Java Virtual Machine」と表示され、Eclipse起動できない

さっきまで問題なく使えていたEclipseが以下のメッセージを表示し、起動できなくなった。

「Failed to create the Java Virtual Machine」

(原因)
起動のためのJVMがないか、バージョン不正

(対応)
eclipse.ini で、起動JVM(javaw.exe)を指定しましょう。

「-vmargs」オプションの前に、

-vm
Eclipse起動時に使用するJVM(例 C:\Program Files\Java\jre7\bin\javaw.exe)

を追加。


「-vm」オプションの記述がない場合は、
「Eclipse」フォルダの「jre」フォルダのJRE ->
環境変数「Path」に記述されたフォルダを左側から順に検索するので、

「%SystemRoot%\system32」フォルダのJREが使用されてしまい、
意図したJREにならないので、注意!

2014年1月7日火曜日

Eclipse エクスポート ファイル・システムと同期がとれていません

Androidのプロジェクトをエクスポートしようとしたら、
「エクスポート中に問題が見つかりました」とエラー表示された。
詳細ボタンを押すと、

「エクスポート中に問題が見つかりました:
  XXXXXXXXX のエクスポート・エラー:
リソース 'XXXXXXXXX' はファイル・システムと同期がとれていません。」

とのこと。
そういうときは、

該当プロジェクトを選択し、
メニュー「プロジェクト」 -> 「クリーン」

でOK

2013年6月7日金曜日

Javaの0除算

Javaの0除算は、
int型同士だと、ArithmeticExceptionの例外が発生する
が、
doubleだと、NaN(Not a number 非数)になる
(例 0.0/0 -> NaN)
という仕様。

なぜか、というと、計算の仕方が違うから。

int同士の割り算は、通常、CPUの「除算命令」で実行し
float同士の割り算やdouble同士の割り算は、
通常、浮動小数点演算コプロセッサ、もしくはソフトウェアで演算するから。
コプロセッサの場合(ソフトウェアも同じ)、
0除算の演算結果は「0以外/0は無限大(inf)」になり「0/0は非数(nan)」になり例外は発生しない。

ちなみに、分母が0でないときには、Infinity(無限大)になる
(例 1.0/0 -> Infinity)

参考サイト↓
http://www.ibm.com/developerworks/jp/java/library/j-jtp0114/

2013年3月6日水曜日

Windows Javaアプリを強制終了させるには

複数プロセスが起動している場合は、
コマンドプロンプトで、

>jps
と入力するとJavaプロセス一覧が表示されるのでプロセスIDを確認。

>taskkill /pid プロセスID  /F

で強制終了する

2013年3月5日火曜日

Java Logging API JDK7では

Javaの標準ライブラリでログを出力してくれるLogging APIについては、
以下のサイトに詳しく書いてある↓
http://www.02.246.ne.jp/~torutk/javahow2/logging.html

Logging APIのJava SE6からJava SE7への主な変更点

①Logger.getLoger(Logger.GLOBAL_LOGGER_NAME)は非推奨になったので、
  Logger.getGlobal()を使うこと
 
 (非推奨になった理由 このグローバル定数は初期化時にデッドロックが発生する可能性がある)

②SimpleFormatterクラスのフォーマットをプロパティで記述できる
 (Java SE 6まではSimpleFormatterクラスのサブクラスを定義しないといけなかった)

しかし、(Java SE7 update17時点では)実装に問題があり、ログが出ないことがある。
logger.setLevel(Level.INFO)を呼び出すことで回避できるらしい。
が、コンソール出力はOKだが、ファイル出力はNGだった。

(例)ソースの一部
  Logger logger = Logger.getGlobal();   // Logger.GLOBAL_LOGGER_NAME)は非推奨
  logger.setLevel(Level.INFO); // バグ回避
  logger.info("info log");

Javaアプリケーションでログ出力するには

Javaでよく聞くログライブラリは、
①java.util.loggingパッケージ
②Apache Log4J
③SLF4J
④commons-logging
⑤Logback

①はJDK1.4から入っている標準ライブラリ
それ以前は②を使ってたから、いまだにLog4Jを使ってるところが多いらしい。
②Log4Jの創始者中心になって開発したのが、③SL4J

①・②・③はログを出力してくれるライブラリだが、
④⑤は、ラッパー。
実際のログ出力に何を使っていたとしても、標準のインタフェースを提供するもの。
⑤Logbackは、④commons-loggingの後継と言われている。

まとめると、
 昔はApache Log4J+commons-logging 
だった(いまでも一番多い)が、
 これからはSLF4J+Logback

でもそのまえに標準のjava.util.loggingパッケージを使ってみよう。
機能的には劣るが、なんせ標準パッケージなので、
何も準備がいらないのがいい!
(②や③はjarファイルをダウンロードして、クラスパスを設定しないといけない)