【问题标题】:Java Chatting program cannot see any messages on JtextArea(Netbeans!!)Java 聊天程序在 JtextArea(Netbeans !!)上看不到任何消息
【发布时间】:2016-12-30 14:22:35
【问题描述】:

在主线任务之前,我想说对不起我的英语不好(我不是以英语为母语的人)

我有一个很大的学校项目,为了这个项目,我决定创建一个简单的java聊天程序。 我的老师说,如果我写下我获取该代码的地方,则可以使用开源代码。

我从这里获取了代码: https://www.youtube.com/watch?v=kqBmsLvWU14&t=411s

视频以 JFrame 形式创建程序,如果我完全喜欢视频,它对我有用。但是,如果我只是扩展 JFrame 而不以 JFrame 形式创建文件,则代码不起作用。如果您观看视频和我的代码,我想您会明白我的意思。

package Chat;
//Server 

import java.awt.*;
import java.awt.event.*;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.*;


public class Chat_Server extends JFrame implements ActionListener{
JButton jb1 = new JButton("Invite");
JButton Name = new JButton("Name");
JButton Enter = new JButton("Enter");
JPanel jp1 = new JPanel();
JPanel jp2 = new JPanel();
JPanel jp3 = new JPanel();
static JTextArea textarea = new JTextArea(500,500);
JTextField textfield = new JTextField(35);
static ServerSocket SS;
static Socket S;
static DataInputStream DIS;
static DataOutputStream DOS; 

public Chat_Server(){
    jp1.setLayout(new FlowLayout());
    jp1.add(jb1); jp1.add(Name);
    jb1.addActionListener(this);
    Name.addActionListener(this);
    jp2.add(textarea);
    jp3.setLayout(new FlowLayout());
    jp3.add(textfield); jp3.add(Enter);
    add(jp1, BorderLayout.NORTH);
    add(jp2, BorderLayout.CENTER);
    add(jp3, BorderLayout.SOUTH);
    setSize(500,500);
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e){
    String name;
    if(e.getSource()==jb1)
       Call();
    if(e.getSource()==Name){
        name = JOptionPane.showInputDialog("Type your name");
        String Servername = name;
    }
    if(e.getSource()==Enter){
         try{
    String MessageOut= "";
    MessageOut = textfield.getText();
    DOS.writeUTF(MessageOut);
    }catch( Exception ex){

    }
    }
}
public void Call(){
    Chat_Client CC = new Chat_Client();
}
public static void main (String[] args){
    Chat_Server cs = new Chat_Server();
     String MessageIn = "";
    try{
     SS = new ServerSocket(1000);
     Socket S = SS.accept();
     DIS = new DataInputStream(S.getInputStream());
     DOS = new DataOutputStream(S.getOutputStream());



     while (!MessageIn.equals("Stop the chat")){
         MessageIn = DIS.readUTF();
         textarea.setText(textarea.getText()+"\n"+MessageIn);
     }
    }
    catch(Exception e){

    }

  }
   }

------------------------结束下一个代码---------- ----------------------

package Chat;

import static Chat.Chat_Server.SS;

 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.*;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.net.ServerSocket;
 import java.net.Socket;

public class Chat_Client extends JFrame implements ActionListener{
JButton Name = new JButton("Namn");
JButton Enter = new JButton("Enter");
JPanel jp1 = new JPanel();
JPanel jp2 = new JPanel();
JPanel jp3 = new JPanel();
static JTextArea textarea = new JTextArea(500,500);
JTextField textfield = new JTextField(35);
static ServerSocket SS;
static Socket S;
static DataInputStream DIS;
static DataOutputStream DOS; 

public Chat_Client(){
   jp1.add(Name);

    Name.addActionListener(this);
    jp2.add(textarea);
    jp3.setLayout(new FlowLayout());
    jp3.add(textfield); jp3.add(Enter);
    add(jp1, BorderLayout.NORTH);
    add(jp2, BorderLayout.CENTER);
    add(jp3, BorderLayout.SOUTH);
    setSize(500,500);
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    }
    public void actionPerformed(ActionEvent e){
    String name;

    if(e.getSource()==Name){
        name = JOptionPane.showInputDialog("Ange ditt namn");
        String Kundname = name;
    }
    if(e.getSource()==Enter){
         try{
    String MessageOut= "";
    MessageOut = textfield.getText();
    DOS.writeUTF(MessageOut);
    }catch( Exception ex){

    }
    }
}
        public static void main (String[] args){
    Chat_Client cc = new Chat_Client();
    String MessageIn = ""; 
    try{
     S = new Socket("127.0.0.1",1000);
     DIS = new DataInputStream(S.getInputStream());
     DOS = new DataOutputStream(S.getOutputStream());

     while (!MessageIn.equals("Stop the chat")){
         MessageIn = DIS.readUTF();
         textarea.setText(textarea.getText()+"\n"+MessageIn);
     }
    }
    catch(Exception e){

    }

   }
   }

如果我单击名称为 Enter 的 JButton,文本必须在另一个屏幕的 JTextArea 上可见,就像在视频中一样,但在我的情况下,Java 不发送任何内容,我不明白为什么会这样 :(

【问题讨论】:

  • 不要复制代码。学习想法并复制它们,但编写所有您自己的代码,您就会理解它并避免类似的问题。
  • 另外,如果那个教程告诉你在做的时候使用一堆静态字段和空的 catch 块,那么它不值得观看或学习。
  • @DontKnowMuchButGettingBetter 是的,该代码非常可怕。例如,所有那些 catch 块都是 empty绝对可怕。这意味着任何错误消息都会被丢弃。
  • 我必须同意其他人的观点。您正在尝试组合 2 个复杂的 Java 字段,并且似乎不理解一些基本的东西,因为异常处理是灾难的根源。要么让自己接受 2 周的紧张学习,要么选择更容易做的事情。
  • @javaprogrammer 请首先更改您的 catch 块,至少打印堆栈跟踪。做 e.printStackTrace();在每个 catch 块中。然后,运行程序并让我们知道您是否遇到任何错误。否则,就像其他人建议的那样重新开始。该代码的标准非常低。最好试试标准的 Java 教程。

标签: java swing netbeans


【解决方案1】:

首先,您尚未使用任何 ActionListener 注册您的“Enter”按钮。添加下面的行。 (您既没有在服务器中也没有在客户端中 - 在构造函数中添加这两个文件,就像您为其他控件所做的那样)

Enter.addActionListener(this);

此外,您的 textarea 似乎在您的窗口中无法正确显示。将您的 textarea 大小更改为 (20,20) 而不是 (500,500) ,这似乎超出了您的面板并且不完全可见。进行这些更改后,它应该可以工作。稍后将尺寸更改为适合您面板的任何尺寸。我建议学习布局以更好地管理控件位置。

请参考标准教程进行学习,而不是去那些不清楚和不那么标准的教程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多