我正在使用grph库进行大学项目(www.i3s.unice.fr/~hogie/grph/) 但我只有Linux的问题,当我创建一个新的Graph对象时,我收到以下异常:
Exception in thread "main" java.lang.ExceptionInInitializerError
at org.elendev.wesproject.graph.GraphFactory.main(GraphFactory.java:19)
Caused by: java.lang.NullPointerException
at toools.os.OperatingSystem.getLocalOS(OperatingSystem.java:47)
at grph.Grph.setCompilationDirectory(Grph.java:353)
at grph.Grph.<clinit>(Grph.java:246)
... 1 more
我试着直接调用getLocalOS函数,用:
System.out.println(toools.os.OperatingSystem.getLocalOS());
我收到同样的例外。我找不到有关该库的信息,并且在macbook上启动的项目完美无缺。
我目前使用的操作系统是gentoo linux 32bit。 而jdk版本是:1.7.0_65
知道可能出现什么问题?
答案 0 :(得分:1)
不确定这是否可以作为答案,但它至少可以帮助解决问题:
例外来自toools.os.OperatingSystem.getLocalOS
方法。虽然您提到的网站上的.JAR文件高达39 兆字节,但此类的源代码不包含在其中。
似乎根本没有关于这个课程的信息。 Google和Maven都没有找到与toools
包相关的任何内容。人们必须假设它是一个废弃的实用工具类,很久以前就已经过世了。
但是,有问题的方法可以反汇编为以下代码:
public static OperatingSystem getLocalOS()
{
if (localOS == null)
{
if (new RegularFile("/etc/passwd").exists())
{
if (new Directory("/proc").exists())
{
if (new RegularFile("/etc/fedora-release").exists()) {
localOS = new FedoraLinux();
} else if (ExternalProgram.commandIsAvailable("ubuntu-bug")) {
localOS = new UbuntuLinux();
} else {
localOS = new Linux();
}
}
else if (new Directory("/Applications").exists()) {
localOS = new MacOSX();
} else {
localOS = new Unix();
}
}
else if (System.getProperty("os.name").startsWith("Windows")) {
localOS = new Windows();
} else {
localOS = new OperatingSystem();
}
localOS.name = System.getProperty("os.name");
localOS.version = System.getProperty("os.version");
}
return localOS;
}
由此,您可以获得必须满足的条件,以便将您的操作系统正确地检测为Linux操作系统。特别是,当存在名为/etc/passwd
的文件和目录/proc
时,这应足以将操作系统标识为Linux
。你可能想尝试一下......