我试图从一个属性文件中获取我的Java程序中的值,该文件是在服务器机器上使用python脚本编写的。
程序在本地工作正常,但是当我尝试将属性文件中的整数值转换为程序的变量时,在服务器上我得到空指针异常,例如 :
db_port=34
我做:
int a = Integer.parseInt(p.getProperty("db_port").trim());
正如我之前提到的,这只会导致服务器出现问题,但在localhost上它可以正常工作。 这也发生在我的客户端和中间件机器上。 两者都具有相同的错误,该错误在文件的此retreiving属性值处停止。 但是在localhost上我手动编写了一个属性文件,在服务器上使用这个脚本生成它。
我编写属性文件的方式是在一个配置文件中,该文件包含值,我的脚本从那里获取值并将它们写入属性文件以放在不同的机器上(IN 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);
所以属性文件是问题,不知何故我弄乱了属性文件的生成。
答案 0 :(得分:0)
显然,您要查找的属性根本不在文件中,因此Properties.getProperty()
返回null,因此String.trim()
获取NPE。
查看堆栈跟踪:哪些应该包含在您的问题中。并查看您的房产名称。
编辑现在您已经最终披露实际问题是NumberFormatException
,这只能表示属性值不是数字。
但我已经受够了。
答案 1 :(得分:0)
问题在于上面发布的python脚本从配置文件中获取了变量,并将它们都变成了小例子,正如您在上面看到的名称'Servername'
变为servername
一样,让我不知所措代码让我看不到明显的,现在我不知道为什么我写的脚本做了那个,但我不是python专家,我现在只做了我所有的变量小案例!
感谢所有试图提供帮助的人。