不同数量的命令行参数

时间:2013-11-05 21:17:17

标签: java sockets command-line-arguments

以下代码给出 “线程中的异常”主“java.lang.Error:未解决的编译问题:     url无法解析为变量“ 错误。可以有三个或四个命令行参数,因此我使用if语句对其进行测试,但代码似乎没有从命令行获取String url。

public static void main(String[] args) throws Exception {


    Socket sock = new Socket("kjlkjlkjl", 80);
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
    writer.write("GET "+ url +"HTTP/1.1\r\n"
            + "Host: jhkjhkjhkjh\r\n"
            + "Connection: keep-alive\r\n"
            + "\r\n");
}

2 个答案:

答案 0 :(得分:3)

您在url声明中确定了if-else,并且writer无法看到它。

以下一种方式更改您的代码:

    String url;
    String target;
    String replacement;
    int odd = -1;
    if(args.length > 3)
    {
        odd = Integer.parseInt(args[0]);
        url = args[1];
        target = args[2];
        replacement = args[3];
    }
    else if(args.length > 2)
    {
        url = args[0];
        target = args[1];
        replacement = args[2];
    }

编辑:我认为您需要观看basics

答案 1 :(得分:1)

要添加@ alex2410所说的内容,这是一个范围问题。所有声明的变量都具有可以识别的特定范围。变量的范围可以由最近的一组括号花括号确定。上面的示例在if / else if块中有两个'url'声明。这意味着它们的范围仅限于该块。 @ alex2410提出了一个正确的解决方案,它为String url提供了一个仅限于main方法的范围。