98 lines
2.9 KiB
Java
98 lines
2.9 KiB
Java
import java.io.File;
|
|
import java.util.Locale;
|
|
|
|
public final class JavaInfo {
|
|
private static final String[] CHECKED_PROPERTIES = new String[] {"os.arch", "java.version", "java.vendor", "java.home"};
|
|
|
|
public static void main(String[] args) {
|
|
int returnCode = 0;
|
|
|
|
for (String key : CHECKED_PROPERTIES) {
|
|
String property = System.getProperty(key);
|
|
|
|
if (property != null) {
|
|
System.out.println(key + "=" + property);
|
|
} else {
|
|
returnCode = 1;
|
|
}
|
|
}
|
|
|
|
System.out.println("java.awt=" + hasClass("java.awt.Toolkit"));
|
|
System.out.println("java.awt.natives=" + hasAwtNatives());
|
|
System.out.println("java.awt.link=" + awtLinks());
|
|
System.out.println("java.jdk=" + hasCompiler());
|
|
|
|
System.exit(returnCode);
|
|
}
|
|
|
|
/** Loads the class without initialising it, so no display is ever needed. */
|
|
private static boolean hasClass(String name) {
|
|
try {
|
|
Class.forName(name, false, JavaInfo.class.getClassLoader());
|
|
return true;
|
|
} catch (Throwable ignored) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private static boolean hasAwtNatives() {
|
|
try {
|
|
String os = System.getProperty("os.name", "").toLowerCase(Locale.ROOT);
|
|
String[] required;
|
|
|
|
if (os.contains("win")) {
|
|
required = new String[] {"awt.dll", "fontmanager.dll"};
|
|
} else if (os.contains("mac") || os.contains("darwin")) {
|
|
required = new String[] {"libawt_lwawt.dylib", "libfontmanager.dylib"};
|
|
} else {
|
|
required = new String[] {"libawt_xawt.so", "libfontmanager.so"};
|
|
}
|
|
|
|
for (String name : required) {
|
|
if (!findNative(name)) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
} catch (Throwable ignored) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private static boolean findNative(String name) {
|
|
File home = new File(System.getProperty("java.home", "."));
|
|
File[] roots = new File[] {
|
|
new File(home, "lib"),
|
|
new File(home, "bin"),
|
|
new File(new File(home, "lib"), System.getProperty("os.arch", "")),
|
|
};
|
|
|
|
for (File root : roots) {
|
|
if (new File(root, name).isFile()) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
private static boolean awtLinks() {
|
|
try {
|
|
java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getClass();
|
|
return true;
|
|
} catch (LinkageError broken) {
|
|
return false;
|
|
} catch (Throwable ignored) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
private static boolean hasCompiler() {
|
|
try {
|
|
return javax.tools.ToolProvider.getSystemJavaCompiler() != null;
|
|
} catch (Throwable ignored) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|