Java grph库:toools.os.OperatingSystem.getLocalOS()的异常

时间:2014-10-12 10:08:33

标签: java linux

我正在使用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

知道可能出现什么问题?

1 个答案:

答案 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。你可能想尝试一下......