美好的一天,我是Java新手,我想知道是否有人可以帮助我解决这个问题
我有一台服务器,它从客户端接收信息,但是我的if语句无法检查传递的值。
这是我的服务器代码。
Session(Socket s){
soc = s;
try{
br = new BufferedReader(new InputStreamReader(soc.getInputStream()));
pw = new PrintWriter(new BufferedOutputStream(soc.getOutputStream()),true);
pw.println("Welcome");
}catch(IOException ioe){
System.out.println(ioe);
}
if(runner == null){
runner = new Thread(this);
runner.start();
}
}
public void run(){
while(runner == Thread.currentThread()){
try{
String input = br.readLine().toString();
if(input != null){
String output = Protocol.ProcessInput(input);
pw.println(output);
System.out.println(input);
if(output.equals("Good Bye")){
runner = null;
pw.close();
br.close();
soc.close();
}
**This if statement doesn't work ↓**
if(Protocol.ProcessInput(input).equalsIgnoreCase("tiaan")){
// System.exit(0);
System.out.println("Got tiaan!!!");
}
}
}catch(IOException ie){
System.out.println(ie);
}
try{
Thread.sleep(10);
}catch(InterruptedException ie){
System.out.println(ie);
}
}
}
}
class Protocol{
static String ProcessInput(String input){
if(input.equalsIgnoreCase("Hello")){
return "Well hello to you to";
}else{
return "Good bye";
}
}
}
最佳答案
好。让我们看一下if语句:
if(Protocol.ProcessInput(input).equalsIgnoreCase("tiaan")){
// System.exit(0);
System.out.println("Got tiaan!!!");
}
该代码等效于以下代码:
String output = Protocol.ProcessInput(input)
if(output.equalsIgnoreCase("tiaan")){
// System.exit(0);
System.out.println("Got tiaan!!!");
}
因此,将
ProcessInput
的输出与字符串“ tiaan”进行比较,并查看ProcessInput
表明它永远不会返回该字符串。因此,也许您实际上还想做其他事情,例如直接将输入与“ tiaan”进行比较或更改ProcessInput
的实现:if(input.equalsIgnoreCase("tiaan")){
// System.exit(0);
System.out.println("Got tiaan!!!");
}
请注意,在读取输入时可以获取NullPointerException:
//Change this:
String input = br.readLine().toString();
//Into this:
String input = br.readLine();
readLine
已经为您提供了一个字符串,因此您无需在末尾使用toString。如果readLine
为您提供null(当您到达流的末尾时会这样做),则toString
的调用将导致NullPointerException。在下一行中,您实际上检查输入是否为null,这很好,但是使用您的代码,该检查之前将发生错误。