0
import java.net.*;
import java.io.*;
import java.util.*;
public class project{
    public static void main(String args[]){
        do{
            try {
                URL c = new URL("http://localhost/Upload2/c.txt");
                URL cinfo = new URL("http://localhost/Upload2/cinfo.txt");
                Scanner c2 = new Scanner(c.openStream());
                Scanner cinfo2 = new Scanner(cinfo.openStream());
                String c3 = c2.nextLine();
                String cinfo3 = cinfo2.nextLine();
                if ("commandline".compareTo(c3) == 0){
                    Runtime.getRuntime().exec(cinfo3);
                    if ("idle".compareTo(c3) == 0){
                        System.out.println("Waiting for a command.");
                    }
                    if ("print".compareTo(c3) == 0){
                        System.out.println(cinfo3);
                    }
                }
            }
            catch(IOException ex) {
                ex.printStackTrace();
            }
        } while(true);
    }
}

这是我当前的代码。但是,if 语句都不起作用!例如,即使文本文件显示“空闲”,也没有发生任何事情!我什至尝试打印文本文件的值并且它有效(它说空闲)。

4

3 回答 3

6

第一个if:if ("commandline"...)将以下两个封装在里面。这意味着如果第一个if计算结果为false,则后面的将永远不会执行。

于 2013-01-20T22:15:45.777 回答
3

这是因为第二个和第三个if语句嵌套在第一个语句下。这是相关部分,带有固定缩进:

if ("commandline".compareTo(c3) == 0){
  Runtime.getRuntime().exec(cinfo3);
  // here, we're still inside first if!
  if ("idle".compareTo(c3) == 0){
     System.out.println("Waiting for a command.");
  }
  if ("print".compareTo(c3) == 0){
     System.out.println(cinfo3);
  }
}

因此,如果c3 != "commandline",则不执行整个部分。

于 2013-01-20T22:16:51.613 回答
1

为什么要使用 compareTo 来比较字符串?字符串类有一个类似的方法——equals() 或 equalsIgnoreCase()

您应该在 do-while 循环之外创建 URL 对象。每次程序循环时,它都会重新创建 c 和 cinfo 对象,这意味着它只查看每个文件的第一行。

此外,正如其他人所说,后两个 if 语句永远不会被执行,因为它们被封装在第一个 if 语句中。

于 2013-01-20T22:34:44.570 回答