【发布时间】:2011-08-24 13:12:10
【问题描述】:
我正在尝试使用 GUI 组件实现聊天服务器。我实现了 3 个部分(服务器、客户端和 GUI 组件)。
以下是我遇到的一些问题 -
- 我无法用 GUI 代码包装代码。
- 与客户交谈时,只有在每个人只输入一行并按回车时才有效。
代码:
第一个 GUI 组件:
public class ChatServer extends javax.swing.JFrame {
String str;
public ChatServer() {
initComponents();
screen.setEditable(false);
}
private void sendActionPerformed(java.awt.event.ActionEvent evt) {
str = enter.getText();
enter.setText("");
screen.append(str+"\n");
}
public static void main(String args[]) {
new ChatServer().setVisible(true);
}
private javax.swing.JTextPane enter;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTextArea screen;
private javax.swing.JButton send;
}
它看起来像:
这是我的服务器代码:
public class Server {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(23);
System.out.println(InetAddress.getLocalHost()+" hazir");
while(true){
Socket s = ss.accept();
System.out.println(s.getInetAddress().getHostName() + " baglandi");
new ServerPart(s).start();
}
}
}
public class ServerPart extends Thread {
private Socket s;
public ServerPart(Socket s){
this.s=s;
}
@Override
public void run() {
try {
PrintStream ps = new PrintStream(s.getOutputStream());
ps.println("Hello" + s.getInetAddress().getHostName());
String gelen;
while(true){
Scanner sc = new Scanner(s.getInputStream());
gelen = sc.nextLine();
if(gelen.trim().equalsIgnoreCase("bye"))
break;
System.out.println("Client: " + gelen);
BufferedReader input = new BufferedReader(
new InputStreamReader(System.in) );
ps.println("Server: " + input.readLine());
}
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
客户端代码:
public class Client extends Thread {
private Socket s;
public Client(Socket s){
this.s=s;
}
@Override
public void run() {
try {
PrintStream ps = new PrintStream(s.getOutputStream());
Scanner sc = new Scanner(s.getInputStream());
ps.println("Hello" + s.getInetAddress().getHostName());
String gelen;
while(true){
BufferedReader input = new BufferedReader(
new InputStreamReader(System.in) );
gelen = sc.nextLine();
if(gelen.trim().equalsIgnoreCase("bye"))
break;
System.out.println("Client: " + gelen);
ps.println("Server: " + input.readLine());
}
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @param args
* @throws IOException
* @throws UnknownHostException
*/
public static void main(String[] args) throws UnknownHostException, IOException {
Socket s = new Socket("192.168.1.173", 23);
new Client(s);
}
}
如果你能帮助我的伙伴们将不胜感激。
【问题讨论】:
-
您不会在 GUI 代码中“包装”一个代码。您首先创建充当非 GUI 模型的真正 OOP 类,然后在 GUI 中使用该模型。如果您不知道如何使用非静态字段和方法创建 OOP 类,请查看教程。在尝试创建它之前,您肯定还想查看Concurrency in Swing 上的教程。
-
更多信息在homework - java chat application线程这里在SO。正如@Hovercraft 所提到的,您需要学习基础知识。尝试理解上面 SO 帖子中提到的示例。
-
好吧,我会继续搜索这些主题。谢谢大家。
-
嗯,你可以确定这不是家庭作业;)它只是一个学生想在 java 上开发自己的工作;)