2015-10-18 113 views
0

我想從屬性文件中獲取我的Java程序中的值,這是使用服務器機器上的python腳本編寫的。NumberFormatException從屬性文件解析數值?

程序工作正常本地,但在服務器上我得到空指針異常,當我嘗試整數值轉換屬性文件到我的程序中的變量,例如

db_port=34 

我做:

int a = Integer.parseInt(p.getProperty("db_port").trim()); 

正如我前面提到的,這隻會導致服務器上的問題,但在本地主機上它工作正常。 這也發生在我的客戶端和中間件機器上。 兩者都具有相同的錯誤,該錯誤停止在該文件的此Retreiving屬性值處。 但是在本地主機上,我手動編寫一個屬性文件,在使用此腳本生成的服務器上。

我寫的屬性文件的方式是在具有值的配置文件和我的劇本從那裏取值,並將其寫入屬性文件在不同的機器被投入(在Python):

prop_file_on_local_machine_S = '%s/middleware.properties'%directory 
with open(prop_file_on_local_machine_S,'w') as f: 

     for keys in configFile.options("middleware_props"): 
      f.write("%s=%s\n"%(keys,configFile.get("middleware_props",keys))) 

我一直在這裏住了10個小時,任何幫助表示讚賞。

編輯:我想提一下,字符串讀取正常,整數不是。

編輯2:

String sp = "/local/r/properties/middleware.properties"; 
     Properties p = new Properties(); 

      p.load(new FileInputStream(sp)); 
      this.serverhost = p.getProperty("Serverhost"); 
      this.serverport = Integer.parseInt(p.getProperty("Serverport").trim()); 
      this.buffersize = Integer.parseInt(p.getProperty("Clientmessagesize").trim()); 

這是我如何加載我的屬性文件。

編輯:當我在本地製作屬性文件我自己它的作品,但也給我一個錯誤,當我使用python生成的文件。 它看起來有點像這樣:

serverport =5555 
serverhost =dryad04.ethz.ch 
clientmessagesize =200 

我想這就是問題所在,屬性的產生通過我的Python代碼文件。

錯誤:

java.lang.NumberFormatException: null 
    at java.lang.Integer.parseInt(Integer.java:454) 
    at java.lang.Integer.parseInt(Integer.java:527) 
    at ch.ethz.rama.asl.client.ClientInstance.<init>(ClientInstance.java:26) 
    at ch.ethz.rama.asl.tests.ClientThreadInstance.run(ClientThreadInstance.java:58) 
    at java.lang.Thread.run(Thread.java:745) 
Exception in thread "Thread-3" java.lang.NullPointerException 
    at ch.ethz.rama.asl.tests.ClientThreadInstance.run(ClientThreadInstance.java:82) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.NumberFormatException: null 
    at java.lang.Integer.parseInt(Integer.java:454) 
    at java.lang.Integer.parseInt(Integer.java:527) 
    at ch.ethz.rama.asl.client.ClientInstance.<init>(ClientInstance.java:26) 
    at ch.ethz.rama.asl.tests.ClientThreadInstance.run(ClientThreadInstance.java:58) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.NumberFormatException: null 
    at java.lang.Integer.parseInt(Integer.java:454) 
    at java.lang.Integer.parseInt(Integer.java:527) 
    at ch.ethz.rama.asl.client.ClientInstance.<init>(ClientInstance.java:26) 
    at ch.ethz.rama.asl.tests.ClientThreadInstance.run(ClientThreadInstance.java:58) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.NumberFormatException: null 
    at java.lang.Integer.parseInt(Integer.java:454) 
    at java.lang.Integer.parseInt(Integer.java:527) 
    at ch.ethz.rama.asl.client.ClientInstance.<init>(ClientInstance.java:26) 
    at ch.ethz.rama.asl.tests.ClientThreadInstance.run(ClientThreadInstance.java:58) 

凡clientinstance的26行是:

this.buffersize = Integer.parseInt(p.getProperty("Clientmessagesize")); 

和其他類的第58行是:

client = new ClientInstance(client_id); 

所以屬性文件的問題,不知何故,我搞砸了屬性文件的一代。

+2

調試它,檢查p是否爲空,然後檢查p.getPropery(「db_port」)是否爲null,如果p.getProperty(「db_port」)爲null,代碼將拋出NPE –

+1

加載屬性?您的python腳本創建後是否修改了屬性文件,以便您的java程序可以正確讀取它? – Bon

+0

@BOND我沒有chmod它,爲什麼我必須這樣做以及如何? – LoveMeow

回答

0

很顯然,您正在尋找的財產根本不在文件中,所以Properties.getProperty()返回null,所以String.trim()得到一個NPE。

查看堆棧跟蹤:應該包含在您的問題中。並檢查你的財產名稱。

編輯現在你已經終於披露實際問題是NumberFormatException,這隻能意味着屬性值不是數值。

但我已經吃夠了。

+0

我認爲它是因爲後面的空格?我將很快發佈錯誤文件。 – LoveMeow

+0

@LoveMeow什麼空間?在什麼字後?你也應該在你的問題中發佈屬性文件本身。 – EJP

+0

我已發佈屬性文件。 – LoveMeow

0

問題是,上面發佈的python腳本從配置文件中獲取了變量,並將它們全部設置爲小型案例,正如您在名稱'Servername'變成servername之後所看到的那樣,用此代碼打破了我的頭部,導致我看不到很明顯,現在我不知道爲什麼我寫的腳本是這樣做的,但我不是一個Python專家,現在我只是把所有可變的小案例都做了!

謝謝所有想要幫助的人。