2016-12-30 3 views
-3

メインクエストの前に、私は(私は英語のネイティブスピーカーではないよ)私の下手な英語のために私excouse言うたいプログラムはJTextAreaに上の任意のメッセージを見ることができないチャットのJava(Netbeansのを!!)

私は大きな学校のプロジェクトを持っていますこのプロジェクトでは、簡単な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は何も送信しません。理由はわかりません:(

+0

コードをコピーしないでください。アイデアを学び、それらをコピーしますが、あなた自身のコードをすべて書くと、あなたはそれを理解し、このような問題を避けます。 –

+0

また、チュートリアルでは静的なフィールドと空のキャッチブロックを使用するように指示している場合は、見たり学習したりする価値がありません。 –

+3

@DontKnowMuchButGettingBetterうん、そのコードはかなり恐ろしいです。例えば、すべての* catch *ブロックが**空**であることは**絶対的に恐ろしい**です。つまり、どんなエラーメッセージも投げ捨てられます。 – GhostCat

答えて

2

まず、ActionListenerに「Enter」ボタンを登録していません。以下の行を追加してください(あなたはそれもサーバーにもクライアントにもありません)。あなたが他のコントロールのためにやったの)

Enter.addActionListener(this); 

はまた、あなたのテキストエリアは、あなたのウィンドウに正しく表示されていないようです。あなたのパネルから出てきて、完全には見えないように見える(500,500)の代わりに、あなたのテキストエリアのサイズを(20,20)に変更してください。これらの変更を行った後、動作するはずです。後でサイズをパネルのサイズに合わせて変更してください。私はあなたのコントロールの位置をよりよく管理するためのレイアウトを学ぶことをお勧めします。

このような不明瞭な標準チュートリアルではなく、学習のための標準チュートリアルを参照してください。

関連する問題