我想從屬性文件中獲取我的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);
所以屬性文件的問題,不知何故,我搞砸了屬性文件的一代。
調試它,檢查p是否爲空,然後檢查p.getPropery(「db_port」)是否爲null,如果p.getProperty(「db_port」)爲null,代碼將拋出NPE –
加載屬性?您的python腳本創建後是否修改了屬性文件,以便您的java程序可以正確讀取它? – Bon
@BOND我沒有chmod它,爲什麼我必須這樣做以及如何? – LoveMeow