今天,当我尝试组合多个“变量”或对象时遇到了一个问题,例如以下示例代码:
String stuff = "blah blah" + amazingness.getName() + " fantabulous code: " + address.
上面的示例正常工作正常,但在我的情况下不起作用.
因此,基本上,我有一台通过UDP方式接收数据的服务器.现在,为了使用UDP,我必须创建许多线程,因此应用程序不会挂起.我不知道问题是否与多线程有关,因为处理器以随机顺序随机运行线程.
我正在使用Java版本1.8更新05.
这是我方法中的代码.
String message = "Client" + c.name + "(" + c.getID() + ") @" + c.address.toString() + ":" + c.port + "disconnected";
其中:c.name为“经典”,c.getID()返回一个随机数,c.address.toString()返回客户端的IP地址,而c.port是客户端的端口.
运行代码时,我收到一条“ Client Classic”消息,什么也没有.
预期的消息是:“客户端经典(1932)@ 70.40.423.110:8112断开连接”
这是一个屏幕截图:
其他值去哪儿了?
现在,我开始认为这可能是因为引用其他类弄乱了向字符串添加更多值的过程.
所以我尝试在设置消息字符串之前获取值
String message = "";
String name = c.name;
int cID = c.getID();
String address = c.address.toString();
int port = c.port;
message = "Client " + name + "(" + cID + ") @ " + address + ":" + port + "disconnected";
System.out.println(message);
其中:字符串名称为Classic,cID为随机数,address为ip地址,port为端口号.所有变量都不是静态的.仍然不会输出所需的消息:
现在,我再次在没有线程的情况下对其进行测试,只是一个独立的类:
可以正常工作!现在,我的问题是为什么会出现上述结果,我做错了什么?
感谢您花时间阅读我的问题,希望您能理解.
编辑1:我注意到,在message的值中,从未添加结束引号,将对其进行调查.
编辑2:看起来故障似乎出在名称变量中,尽管我不知道为什么.
编辑3:看起来name变量包含多个“空”字符,我将对其进行研究.
编辑:我相信我已经解决了问题,我将包含一个摘要:
Since I created a byte array of length 1024 to send through the network, I never trimmed the array before sending.
Calling "string.trim()" deletes the excess whitespace characters created when I set the variable "name".
Even though I had found this out without seeing the answer from David, I'll credit him with the correct answer.