seraphyの日記

日記というよりは過去を振り返るときのための単なる備忘録

java

AdoptOpenJDKのJava8でJavaFX8を使う方法

AdoptOpenJDKのJava8にOpenJFX8を自分でビルドして組み込んで使う方法 ※ AdoptOpenJDK 8u181、Zulu 8u181の両方でも改めて試してみたが問題なく動作している。(2018/10/30) ※ (2018/11/21追記) Amazonが提供するビルド済みOpenJDKであるAmazon Corretto 8 (A…

Java11でJavaFXを使う方法

JavaFXをJava11でビルドして使えるようにする方法 ※ 2018/09/26修正: Java11(build 11+28) + OpenJFX11で試したバージョンに差し替え 要旨 Java11から、JavaFXは分離されるので、Java11(OpenJDK11)でJavaFXを使うにはどうしたらよいのか? 結論としては、以…

Javaのジェネリック型引数をリフレクションによって取得する方法

Javaのジェネリック型引数をリフレクションによって取得する方法 概要 Javaは、Java1.5からジェネリクス(総称型)が利用可能になったが、1.4以前のコードとの互換性のためにイレージャ(Erasure)とよばれる手法をとっている。 簡単にいうと、イレージャとは、…

CompletableFutureの使い方の基本形とFutureTaskとの連携例

Java8から利用可能になったCompluteableFutureとは、他言語におけるDeferredとかPromiseパターンといわれるものと同等のものであり、これにより並列処理を直列的に記述できるようになる。(つまり超便利。) 基本的な使い方 もっとも簡単な使い方としては、Com…

CDIで@Dependentなクラスを@Injectするときに引数を渡す方法(メモ)

概要 CDIで、@Dependentなクラスを定義し、利用する側のクラスのフィールドで@Injectするときに、任意のパラメータを渡したい。 @Dependent public class Foo { @Inject private AnyService srv; private String arg; public void setArg(String arg) { this…

Javaのダイレクトバッファの利用上の注意点と、各種バッファを使った読み込みパフォーマンスの比較

概要 前回では、ヒープ上に確保したByteBufferと、ダイレクトバッファとして作成したByteBufferでのデータの読み取りパフォーマンスを比較した結果、圧倒的にダイレクトバッファが速いことが分かった。 しかし上記ベンチマークは、あえてByteBuffer単体での…

jmhマイクロベンチマークツールを使ったByteBufferのバイトオーダによるパフォーマンスの違いの比較

(ヒープおよびダイレクトバッファによるByteBufferの性能差、およびUnsafeとのパフォーマンスも比較するよ!) (とりあえず計測結果を先に知りたい人は結論を見てね!) (ファイルのシーケンシャルリードを含むダイレクトバッファの使い方やパフォーマンス比較…

JavaFX8で簡単なアプリケーションを簡単に作る方法

動機、なぜJavaFXでアプリを作るのか? Javaには、Swingという、十分に成熟しておりパフォーマンスも悪くないUIライブラリがある。現状、普通に使っている分には何の不自由もない。また、Swingは今後発展することはないとはいえ、(すぐに)廃止されるわけでは…

ForkJoinPoolにおけるタスクのブロッキングの実装方法 (2014/06/03)

ForkJoinPoolにおけるタスクのブロッキングの方法 先にForkJoinPoolの特性や使い方について調べたが、「同期処理」や、単純な「待ち」を含むタスクが、どのようになるのか調べてみた。 結論からいうと、同期をとる必要があるタスクは、Java8でサポートされる…

ForkJoinPoolとForkJoinTaskの特徴と使い方

Fork/Joinとは? JavaSE7でサポートされるjava.util.concurrent.ForkJoinPoolは、ExecutorServiceの一員であり、一見するとThreadPoolExecutorに似たようなものに思えるが、実際は全く別の、異質のものである。 ForkJoinPoolは、ありていに言えばWork-steali…

Java7u51以降でApache Derbyのネットワークサーバを使う場合の設定

概要 最近アップデートされたJava7u51を使用したところ、 Apache Derby 10.10のネットワークサーバを起動しようとすると、以下のような例外が発生して起動できなくなっていた。 db-derby-10.10.1.1-bin\bin>startNetworkServer Fri Feb 14 13:15:27 JST 2014…

EL式(EL3.0)をアプリケーションから活用する

概要 先の記事でEL2.2でのアプリケーションからの利用方法について調べたが、 ついでにEL3.0についても調べてみることにした。 利用方法も更に簡単になっており、便利で興味深い機能も増えている。 EL3の特徴 EL3.0では、EL2.2から文法を大幅に拡張している…

EL式(EL2.2)をアプリケーションへ組み込む方法

概要 JavaのJSP/JSFでは「EL式」という簡易な式言語を用いてオブジェクトの連鎖を評価することができる。 たとえば、"${foo[bar].baz}"というEL式では、fooという配列またはリストから、添え字を示すbarの位置のあるオブジェクトのbazというプロパティを評価…

オンメモリのResultSetとしてJDBCのCachedRowSetを使う方法と、そのリファレンス実装の注意点

CachedRowSetとは? CachedRowSetとは、データベースから取得したResultSetをメモリ上に保持する形にしてオフラインでも扱えるようにできるJDBC標準の仕組みである。 Windowsでいうところの旧ADOのRecordsetオブジェクト、あるいはADO.NETのDataTableのよう…

自作Javaアプリにサンドボックスで動くアドインの仕組みを作る方法

概要 「Javaアプリケーション内から信頼できないかもしれないアドインコードをサンドボックスで実行するための方法」について、簡単なサンプルコードとともに、まとめてみたいと思う。※ 信頼できないかもしれない、という意味は後述。*1 セキュリティマネー…

JavaアプリをExe化するLaunch4jの使い方と仕組み

Launch4jとは? Launch4jとは、JavaアプリケーションのExeラッパーを作成するツールである。以下よりダウンロードできる。http://launch4j.sourceforge.net/ このLaunch4jを使うことで、実行可能JarをExeファイルとして起動できるようにラップすることができ…

JNLPのJava AppletをChromeでも使うお作法 一式メモ

JDK1.6u10以降の新しいアプレットでは、 ファイルの読み書き、クリップボードへのアクセス、ローカルマシンのファイルのアクセスが可能になっている JNLP APIを使い、Java Web Startと同じ使用方法 サンドボックスは従来どおり有効、(ファイルアクセス等はユ…

Apache Derbyで新規データベースにテーブルを自動構築する簡単な方法

新規データベース作成後の処理 Apache Derbyを埋め込みモードで使う場合、指定したパス上にデータベースが存在しない場合、接続URLのオプションとして、自動的に作成するように指示することができる。 たとえば、以下のような接続URLである。 DriverManager.…

Apache-Derbyのアプリへの組込とUDT/UDFの使い方のメモ(後編)

記事が長くなりすぎたので分割しています。前記事は、こちら。 Derbyにおける自動採番の取得方法とシーケンスオブジェクト Apache Derbyは従来は、プライマリキーとしては「generated always as identity」を指定し、自動採番とする方法と、 SQL:2003準拠、O…

Apache Derby Dbのアプリケーションへの組み込み方と、ユーザー定義型、ユーザー関数の使い方

Apache Derby 10.9.1.0のアプリケーションへの組込方法と、ユーザー定義型とユーザー定義関数の使用例について記述する。 動機 昨今、アプリケーションのバックエンドにSQLite3などの軽量・組み込み型データベースが使われる例が非常に多くなっている。 PCの…

Squirrel SQL ClientをApache Derby(JavaDB)のフロントエンドに使ってみる

Apache DerbyにはGUIの管理ツールが標準では存在しない。 コンソール画面での対話ツールである「ij」で一通りデータベースの管理はできる。 これは、OracleでいうところのSQL*Plusみたいなものである。 DDLのようなものは、たとえばERツールで生成するなどし…

設定ファイル等の読み書きにXML形式を使う3つの方法(簡単なもの順)

java.util.Propertiesを使う J2SE5以降のjava.util.Propertiesは、XMLファイル形式をサポートしている。 日本語などを使う場合も、昔ながらの native2ascii のお世話になる手間がなく、 デコードし直さなくても、ちゃんと人間が読める文字なので修正もらくち…

コンパイルされたクラスファイルのターゲットとしていたJavaVMのバージョンを確認する方法

動機 たとえば、コレクションクラスを使っているのにジェネリックでないソースと、そのコンパイル済みのクラスファイルをもらったとする。 日付は2010年あたりになっている。 書き方や使っているクラスからみて、もともとは、かなり古いソースと見受けられる…

ラムダ/クロージャ/ブロックの覚え書き

C#, C++, Objective-Cのラムダ(匿名関数)の基本的な使い方の覚え書きと、JavaSE7時点のラムダ相当のイディオムについての雑記。(※ プログラムの作用に主眼を置いて、単純に、Lambda ≒ Closure ≒ Block ≒ 匿名関数 という認識で書いてます。) C#4.0のラムダの…

JavaSE7でファイルを監視する方法

動機 上記、Windows(C++)でのファイル監視方法を試したので、その流れで、ついでにJavaSE7以降からサポートされるようになったJavaのファイル監視のAPIを試してみる。 いきなり実験コード (JavaSE7 Update4 on Windows7 64ビット版) package fwatch_java7; i…

JAVAで透過画像(透過PNG)をクリップボードに設定する方法(Linux編)

前回、Windows環境で、透過画像をクリップボードにいれる方法について実験したので、 今回は、Linux環境(Ubuntu10.04 + sun-java-jdk6)での実験を行う。(※2012/5/5追記、Ubuntu12.04 + OpenJDK7で簡単に試した結果を追記しました。)結論的にいうと、現在のLi…

JAVAで透過画像(透過PNG)をクリップボードに格納する方法(Windows編)

Windows上のJAVA実行環境で、透過でない画像をクリップボードに設定するのは簡単である。単に、Transferableを実装したクラスでBufferedImageなど、java.awt.Image派生オブジェクトを返せば、それだけでOKである。たとえば、こんな感じに。 /** * クリップボ…

JAVAアプリをMac OS X用にApplication Bundle化する

昨日の続き。 Mac OS Xには実行ファイルや、それに付随するリソースファイルなどをフォルダにまとめて、それらの複雑な階層構造を、あたかも1個のファイルであるかのように見せかける「バンドル」ファイルというものがある。 たいていのアプリケーションは1…

Javaアプリケーションの起動時にスプラッシュをつける

JavaSE6以降ではJavaアプリケーションの起動時にスプラッシュスクリーンを表示できるオプションが加わった。 これはアプリケーションのクラスがロードし終わるまえにJava実行ファイル側が表示してくれるものであるため、可能な限り早い段階で画面に表示され…

Pure JavaでMacOSX対応のアプリケーションを作る方法 (実行可能JAR編)

JavaアプリケーションをMac OS Xで動かすための注意点 Mac OS Xには、Apple謹製のJavaVMがあるので、動かすことが第一義であれば、通常のJavaのマルチプラットフォーム対策ができていれば良い。 基本的には特別な対策は必要ない。 さすがWrite Once, Run Any…