【发布时间】:2014-01-22 11:03:53
【问题描述】:
希望我不需要用我的代码来淹没这篇文章,但如果需要,请询问。
另外,我只将getPassword().toString() 用于测试目的,我没有在我的任何应用程序中使用它。
客户端:
从JPasswordField passfield获取密码,通过ObjectOutputStream out作为字符串发送
服务器端:
通过ObjectInputStream in接收字符串,打印到控制台
很简单,但我遇到的问题是,它不是显示字符串,而是打印一个对象([C@6af3a631) 我发送和接收对象的方式非常简单:
客户:
out.writeObject(passfield.getPassword().toString())
服务器:
Object data;
while((data = in.readObject) != null) {
if(data instanceof String) {
System.out.println(data);
}
}
如果我发送"hey" 而不是passfield.getPassword().toString()),字符串打印出来就好了。
我对 ObjectOutputStream 已经很熟悉了,而且我从来没有遇到过这个问题,所以我猜它可能与 JPasswordField
这是帮助我理解更大问题的一小步(包含密码的数据包发送得很好,数据包接收得很好,但密码变量为空)。
【问题讨论】:
-
passfield.getPassword().toString()永远不要调用它。String实例可能会在 JVM 中徘徊以被盗,因此永远不要将密码转换为String。 -
是的,我明白了,这仅用于测试目的。我当时认为 char[] 可能会造成一些干扰,所以我将其作为字符串发送以检查
-
@AndrewThompson 而不是...?你最好在说“不要那样做”的同时,说出要做什么。
-
您提供的代码甚至无法编译。请显示实际代码,否则我们无法判断问题出在复制代码还是原始代码上。一个简短而完整的程序来演示这个问题将是理想的......
-
@VinceEmigh:是的,Stack Overflow 上有很多不好的问题。这不是添加更多内容的好理由 :) 如果您要发布代码,请确保这样做很有用。如果您认为发布可编译代码不值得花时间,请不要发布任何代码。 (当然,如果你想弄清楚为什么某些东西无法编译,则例外。)请参阅tinyurl.com/so-list 和tinyurl.com/so-hints,了解我对编写好问题的建议。
标签: java swing stream nullpointerexception client-server