如何在第2章电子书Java消息服务中运行代码示例聊天?

时间:2015-03-24 09:34:27

标签: java jms

如何在第2章电子书Java消息服务中运行chat.class?

code here

我无法运行main方法虽然我添加javax.jms仍然无法运行

/* Run the Chat client */
    public static void main(String [] args){
        try{
            if(args.length!=3)
                System.out.println("Topic or username missing");

            // args[0]=topicName; args[1]=username; args[2]=password
            Chat chat = new Chat(args[0],args[1],args[2]);

            // read from command line
            BufferedReader commandLine = new
              java.io.BufferedReader(new
                                     InputStreamReader(System.in));

            // loop until the word "exit" is typed
            while(true){
                String s = commandLine.readLine();
                if(s.equalsIgnoreCase("exit")){
                    chat.close(); // close down connection
                    System.exit(0);// exit program
                }else
                    chat.writeMessage(s);
            }
        }catch(Exception e){ e.printStackTrace(); }
    }
}

错误

Topic or username missing
java.lang.ArrayIndexOutOfBoundsException: 0
    at chap2.chat.Chat.main(Chat.java:97)

1 个答案:

答案 0 :(得分:0)

似乎你对Java很陌生 首先,请注意您收到的消息("主题或用户名丢失")来自代码本身,因此代码 正在运行。

查看它的来源:打印它是因为args.length不等于3.从命令行运行Java类时,参数将传递到args数组中。所以,你应该提供足够的参数。

那应该解决直接问题。在这条线下面,我想再解释一下。


错误消息

  

java.lang.ArrayIndexOutOfBoundsException:0
      在chap2.chat.Chat.main(Chat.java:97)

非常清楚:它在Chat.java的第97行出错了。在main方法中。 如果您看到这一点,您应该查看该行的代码(大多数IDE会告诉您行号,如果您知道在哪里查看)。

当你在SO(或任何地方)发布问题时,会有一个堆栈跟踪 使用行号,最好指出行号指的是哪一行。这有助于那些阅读您问题的人更好地理解问题。

ArrayIndexOutOfBoundsException表示您有一个指向数组外的数组索引 我有一种预感,这条线就是这一条:

Chat chat = new Chat(args[0],args[1],args[2]);

在这种情况下,索引值为0,正如我们在错误消息中看到的那样。对于初学者来说可能有点混乱,但args[0]是数组中的第一个值。 (args[1]是第二个,args[2]是第三个,依此类推。)

因此,如果0已超出数组的范围...这意味着您的数组甚至没有第一个值。它有0个值。

然后,错误导致Java尝试读取具有0个元素的数组的第一个元素。解决方案是:

  • 要么确保数组有足够的值
  • 或提供错误消息并停止执行该部分代码。

这个例子有点草率,因为它确实提供了一条错误信息,但随后继续执行代码直到它崩溃。