Preference で設定した値を使用する
値を利用するのは、値を設定するのと基本的には同じようです。
IPreferenceStore オブジェクトを取得して、そこから getString メソッドで home を取得するようにしました。
IPreferenceStore store = WrpePlugin.getDefault().getPreferenceStore(); String home = store.getString(WrpePlugin.LG3D_RREF_HOME_KEY);
CLASSPATH は今までの決めうちではなくて、定数に home を付加するようなコードを付け加えました。
これが定数
private final static String INIT_CLASSPATH[] = { "/", "/lib/ext/lg3d-core.jar", "/ext/activation.jar", "/ext/escher-0.2.2.lg.jar", "/ext/j3d-contrib-utils.jar", "/ext/jaimlib.jar", "/ext/mail.jar", "/ext/nwn-0.7.jar", "/ext/odejava.jar", "/ext/satin-v2.3.jar"};
そして、処理は
String classpath[] = new String[INIT_CLASSPATH.length]; for (int i = 0; i < INIT_CLASSPATH.length; i++) { classpath[i] = home + INIT_CLASSPATH[i]; }
同じように VM へのオプションも定数に home を埋め込んでいくような形です。こちらは java.util.Formatter を使ってみました。
定数が
private final static String INIT_VMARGS = "-Xmx512m -Dj3d.sortShape3DBounds=\"true\"" + " -Dlg.configurl=file:///%1$s/etc/lg3d/lgconfig_1p_nox.xml" + " -Dlg.displayconfigurl=file:///%1$s/etc/lg3d/displayconfig/j3d1x1" + " -Dlg.etcdir=%1$s\\etc\\";
%1$s といのが書式を決めているところです。
これに対してここに home を埋め込んでいるのが
Formatter formatter = new Formatter(); formatter.format(INIT_VMARGS, home); String vmArgs = formatter.toString();
C の sprintf だと、埋め込む場所 (INIT_VMARGS だと 3 箇所) と同じ個数だけ、変数を列挙しなければいけないですよね。Java だと % の後に数字を書いて、その後に $ を書くと、その数字が埋め込む変数のインデックスになります。
したがって INIT_VMAGRS のようにすべて %1$s とすると、format メソッドでは 1 つの変数を書くだけで OK です。
ということで、Preference せインストール場所を変更しても、ちゃんと LG3D を起動させることができました。