2012-02-06 210 views
0

hello我想從java中產生gams我已經安裝了gams,這裏是代碼 gams是一個應用程序,我想從java調用它,我相信路徑是確切的,我應該怎麼做才能糾正它?這讓我異常 例外:錯誤線程「main」中的異常java.lang.NullPointerException

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 

這裏是我從this link改變

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"); 
     } 
} 

回答

7

看看這段代碼的代碼:

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

你正在創建的數組五個元素但僅填充四個其中。

嘗試將數組大小更改爲4,如果只需要四個參數。

+0

非常感謝你 – Nickool 2012-02-06 13:32:02

0

。在你的路徑空間,只要看看下面幾行,

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

在這裏,在這條線,你已經定義的「程序文件」,它contans空間,所以基本上你的變量cmdArray [0]只存儲類似於= C:\ Program的保持值,它在空格後終止。與其他數組元素髮生同樣的方式,所以它提供了一個Nul指針異常。

2

避免創建大小錯誤的數組的方法是使用一個班輪。

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(","); 
相關問題