如何在第2章电子书Java消息服务中运行chat.class?
我无法运行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)
答案 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个元素的数组的第一个元素。解决方案是:
这个例子有点草率,因为它确实提供了一条错误信息,但随后继续执行代码直到它崩溃。