四つ葉のタクシー
(0)
(0)
(0)
(0)
Total: 0

京都にはヤサカグループという三つ葉マークのタクシー会社があります。その会社の1500台のタクシーの中で、4台だけ四つ葉マークのタクシーが走っていますが、京都生活8年目にしてようやく乗ることができました。
乗車記念のカードとシールを頂きました♪
(0)
(0)
(0)
(0)
Total: 0

京都にはヤサカグループという三つ葉マークのタクシー会社があります。その会社の1500台のタクシーの中で、4台だけ四つ葉マークのタクシーが走っていますが、京都生活8年目にしてようやく乗ることができました。
乗車記念のカードとシールを頂きました♪
(2)
(0)
(0)
(0)
Total: 2
この実行結果を見る限り、”java.class.path”に必要なパスを追加してやればイイじゃん!と安易に思ってしまうのですが、これが失敗の始まりです。
Javaのクラスローダは起動時にクラスパスを確定してしまうので、安直に『System.setProperty』ではクラスパスを改変する事ができません。(クラスローダの詳しい仕組みについてはこちらをご覧下さい)
で、結局リフレクションで無理やりパスを追加する事になります。
package com.daisukeyamashita.util;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
@SuppressWarnings("unchecked")
public class ClassPathModifier {
private static final Class[] parameters = new Class[] { URL.class };
public static void addFile(String s) throws IOException {
File f = new File(s);
addFile(f);
}
public static void addFile(File f) throws IOException {
addURL(f.toURL());
}
public static void addURL(URL u) throws IOException {
URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Class sysclass = URLClassLoader.class;
try {
Method method = sysclass.getDeclaredMethod("addURL", parameters);
method.setAccessible(true);
method.invoke(sysloader, new Object[] { u });
} catch (Throwable t) {
throw new IOException("could not add " + u + " to classpath");
}
}
}
(0)
(0)
(0)
(0)
Total: 0
JavaがOSから受け取る情報はSystem.getProperties()で取得する事ができます。
public class Test {
public static void main(String[] args) {
System.getProperties().list(System.out);
}
}
上記のコードを実行すると、下記のような表示結果になります。
-- listing properties --
java.runtime.name=Java(TM) 2 Runtime Environment, Stand...
sun.boot.library.path=C:Program FilesJavajre1.5.0_12bin
java.vm.version=1.5.0_12-b04
java.vm.vendor=Sun Microsystems Inc.
java.vendor.url=http://java.sun.com/
path.separator=;
java.vm.name=Java HotSpot(TM) Client VM
file.encoding.pkg=sun.io
user.country=JP
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=Service Pack 2
java.vm.specification.name=Java Virtual Machine Specification
user.dir=C:Documents and Settingsdaisukewor...
java.runtime.version=1.5.0_12-b04
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=C:Program FilesJavajre1.5.0_12lib...
os.arch=x86
java.io.tmpdir=C:DOCUME~1daisukeLOCALS~1Temp
line.separator=
java.vm.specification.vendor=Sun Microsystems Inc.
user.variant=
os.name=Windows XP
sun.jnu.encoding=MS932
java.library.path=C:Program FilesJavajre1.5.0_12bin...
java.specification.name=Java Platform API Specification
java.class.version=49.0
sun.management.compiler=HotSpot Client Compiler
os.version=5.1
user.home=C:Documents and Settingsdaisuke
user.timezone=
java.awt.printerjob=sun.awt.windows.WPrinterJob
file.encoding=MS932
java.specification.version=1.5
user.name=daisuke
java.class.path=C:Documents and Settingsdaisukewor...
java.vm.specification.version=1.0
sun.arch.data.model=32
java.home=C:Program FilesJavajre1.5.0_12
java.specification.vendor=Sun Microsystems Inc.
user.language=ja
awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=mixed mode, sharing
java.version=1.5.0_12
java.ext.dirs=C:Program FilesJavajre1.5.0_12lib...
sun.boot.class.path=C:Program FilesJavajre1.5.0_12lib...
java.vendor=Sun Microsystems Inc.
file.separator=
java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport...
sun.cpu.endian=little
sun.io.unicode.encoding=UnicodeLittle
sun.desktop=windows
sun.cpu.isalist=