BASE64Encoderを使おうとしたら「rt.jarで制限されているためアクセスできません」と言われた件

Eclipse 3.5(Pleiades All in One 3.5.1.20090930でjdk1.6.0_06を使用)でのお話。
Javaプロジェクトを作って、sun.misc.BASE64Encoderを使おうとしたらエラーと表示されました。
メッセージを見ると、「アクセス制限: 型 BASE64Encoder は必須ライブラリー (Javaのインストールディレクトリ)\lib\rt.jar で制限されているためアクセスできません」とのこと。
検索しても対処法がすぐにわからなかったので、メモしておきます。
Continue reading →

JNIで起動したJavaVMからnativeメソッドをコールバック

JNIを使ってCなどのnativeプロセスからJavaVMを起動し、さらにそのJavaVMからnativeメソッドをコールバックさせる方法です。Webで調べた際に、意外と情報が見つからなかったのでメモ。

結論から言ってしまうと、RegisterNativesというJNI関数を使用します。この関数は、jclassとJNINativeMethod構造体の配列を引数に取り、Java側のnativeメソッド宣言とnative側のメソッド本体を動的に結びつけます。

具体的な使い方は、以下のサンプルコードを参考にしてください。
Continue reading →