1.我是java的新手,所以我是一个菜鸟,但我试图让这个聊天服务器和客户端 到目前为止服务器将运行但客户端不会返回标题中的错误,请帮助并尝试保持noob友好:)
import java.net.*;
import java.io.*;
import java.awt.*;
@SuppressWarnings("serial")
class chatClient extends Frame implements Runnable
{
Socket soc;
TextField tf;
TextArea ta;
Button btnSend,btnClose;
String sendTo;
String LoginName;
Thread t=null;
DataOutputStream dout;
DataInputStream din;
chatClient(String LoginName,String chatwith) throws Exception
{
super(LoginName);
this.LoginName=LoginName;
sendTo=chatwith;
tf=new TextField(50);
ta=new TextArea(50,50);
btnSend=new Button("Send");
btnClose=new Button("Close");
soc=new Socket("127.0.0.1",5211);
din=new DataInputStream(soc.getInputStream());
dout=new DataOutputStream(soc.getOutputStream());
dout.writeUTF(LoginName);
t=new Thread(this);
t.start();
}
@SuppressWarnings("deprecation")
void setup()
{
setSize(600,400);
setLayout(new GridLayout(2,1));
add(ta);
Panel p=new Panel();
p.add(tf);
p.add(btnSend);
p.add(btnClose);
add(p);
show();
}
@SuppressWarnings("deprecation")
public boolean action(Event e,Object o)
{
if(e.arg.equals("Send"))
{
try
{
dout.writeUTF(sendTo + " " + "DATA" + " " + tf.getText().toString());
ta.append("\n" + LoginName + " Says:" + tf.getText().toString());
tf.setText("");
}
catch(Exception ex)
{
}
}
else if(e.arg.equals("Close"))
{
try
{
dout.writeUTF(LoginName + " LOGOUT");
System.exit(1);
}
catch(Exception ex)
{
}
}
return super.action(e,o);
}
public static void main(String[] args) throws Exception
{
chatClient Client=new chatClient(args[0], args[1]);
Client.setup();
}
public void run()
{
while(true)
{
try
{
ta.append( "\n" + sendTo + " Says :" + din.readUTF());
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
}
答案 0 :(得分:0)
我怀疑你是用它开始的:
java chatClient
您需要指定登录名和您要与之聊天的人,例如
java chatClient fred george
否则args
将是一个空数组,因此评估args[0]
中的args[1]
或main
将会失败。
我也强烈建议您修复缩进和命名 - 遵循标准Java naming conventions。
答案 1 :(得分:0)
您的计划中唯一的数组似乎是args
中的main
。如果您没有输入任何命令行参数,那么该数组的长度为0
,并且没有要访问的元素。
您需要两个参数,因此在访问之前请检查数组的长度。
if (args.length >= 2)
{
chatClient Client=new chatClient(args[0], args[1]);
Client.setup();
}
else
{
// Handle error.
}
答案 2 :(得分:0)
实例化chatClient对象时,您要指定args数组中的两个元素:
chatClient Client=new chatClient(args[0], args[1]);
此数组从命令行参数填充。您必须在调用程序时指定它们,否则数组将为空:
java chatClient arg1 arg2
您可以阅读有关指定命令行参数here的更多信息。
作为旁注,请考虑重命名您的课程,使其遵循naming conventions:
类名应该是名词,混合大小写的第一个字母 每个内部词都大写。尽量保持你的班级名称简单 和描述性的。使用整个单词 - 避免使用缩写词和缩写词 (除非缩写比长形式更广泛使用, 例如URL或HTML)。