Исключение ошибки в потоке "main" java.lang.NullPointerException - PullRequest
0 голосов
/ 06 февраля 2012

Здравствуйте, я хочу порождать игры из Java. Я установил игры, и вот код gams - это приложение для моделирования. Я хочу назвать его из Java, и я уверен, что путь точный, что мне нужно сделать, чтобы исправить это?это дает мне исключение ИСКЛЮЧЕНИЯ:

    Exception in thread "main" java.lang.NullPointerException
            at java.lang.ProcessBuilder.start(ProcessBuilder.java:441)
            at java.lang.Runtime.exec(Runtime.java:593)
            at java.lang.Runtime.exec(Runtime.java:466)
            at gams.RunGAMS.main(RunGAMS.java:27)

Java Result: 1

вот код, который я изменил с эта ссылка

package gams;

import java.io.File;
import java.io.BufferedReader;
import java.io.InputStreamReader;

class RunGAMS {

      public static void main(String[] args) {
              System.out.println("Start");
              String[] cmdArray = new String[5];
              cmdArray[0] ="C:"+File.separator+"Program Files"+File.separator+"GAMS23.7" + File.separator +"gams.exe";
              cmdArray[1] ="C:"+File.separator+"Documents and Settings"+File.separator+"Parsa"+File.separator+"My Documents"+File.separator+"gamsdir"+File.separator+"projdir" + File.separator +"trnsport.gms";
              cmdArray[2] ="C:"+File.separator+"Documents and Settings"+File.separator+"Parsa"+File.separator+".nbi"+ File.separator+"tmp";
              cmdArray[3] ="LO=3";

              try {
                     Process p = Runtime.getRuntime().exec(cmdArray);
                     BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
                     String s = null;
                     while((s=stdInput.readLine()) !=null){
                        System.out.println(s);
                     }
                     p.waitFor();

              }
              catch (java.io.IOException e )
              {
                     System.err.println(">>>>" + e.getMessage() );
                     e.printStackTrace();
              }
              catch (InterruptedException e )

              {
                     System.err.println(">>>>" + e.getMessage() );
                     e.printStackTrace();
              }
              System.out.println("Done");
      }
}

Ответы [ 3 ]

7 голосов
/ 06 февраля 2012

Посмотрите на этот код:

String[] cmdArray = new String[5];
cmdArray[0] = ...;
cmdArray[1] = ...;
cmdArray[2] = ...;
cmdArray[3] = ...;

Вы создаете массив из пяти элементов, но заполняете только четыре из них.

Попробуйте изменить размер массива на 4, если вам нужно только четыре аргумента.

2 голосов
/ 06 февраля 2012

Чтобы избежать создания массива неправильного размера, используйте один слой.

String sep = File.separator;
String[] cmdArray = {
          "C:"+sep+"Program Files"+sep+"GAMS23.7" + sep +"gams.exe",
          "C:"+sep+"Documents and Settings"+sep+"Parsa"+sep+"My Documents"+sep+"gamsdir"+sep+"projdir" + sep +"trnsport.gms",
          "C:"+sep+"Documents and Settings"+sep+"Parsa"+sep+".nbi"+ sep+"tmp",
          "LO=3"};

или уменьшите его.

String[] cmdArray = "C:/Program Files/GAMS23.7/gams.exe,C:/Documents and Settings/Parsa/My Documents/gamsdir/projdir/trnsport.gms,C:/Documents and Settings/Parsa/.nbi/tmp,LO=3".replaceAll("/", File.separator).split(",");
0 голосов
/ 06 февраля 2012

В вашем пути есть пробел, просто посмотрите на следующие строки,

cmdArray[0] ="C:"+File.separator+"Program Files"+File.separator+"GAMS23.7" + File.separator +"gams.exe";  

Здесь, в этой строке, вы определили «Program Files», которые содержат пробел, поэтому в основном ваша переменная cmdArray [0]хранит только удерживающее значение вроде = C: \ Program, оно заканчивается после пробела.То же самое происходит и с другими элементами массива, поэтому он дает исключение Nul Pointer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...