I made java aplication chat, but in this aplication cannot use to receive the message but can to send the message.. please help me to fix it...
import com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel;
import java.awt.Color;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import sun.applet.Main;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* server.java
*
* Created on 24-Dec-2012, 19:25:33
*/
/**
*
* @author tnt
*/
public class Chat extends javax.swing.JFrame implements ActionListener, Runnable{
public static String hostIP = "localhost";
public static int port = 1234;
public static int user;
public static int statusKoneksi = 0;
public static int statusSiapKirim = 0;
public static StringBuffer textMasuk = new StringBuffer("");
public static StringBuffer textKeluar = new StringBuffer("");
// TCP Components
public static ServerSocket hostServer;
public static Socket socket;
public static BufferedReader in;
public static BufferedWriter out;
protected Thread th;
/** Creates new form server */
public Chat() {
initComponents();
actionPerformed(null);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
txtchat = new javax.swing.JTextArea();
txtkirimchat = new javax.swing.JTextField();
jToolBar1 = new javax.swing.JToolBar();
lblstatus = new javax.swing.JLabel();
txtstatususer = new javax.swing.JLabel();
txtip = new javax.swing.JTextField();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
txtport = new javax.swing.JTextField();
cbuser = new javax.swing.JComboBox();
btnconnect = new javax.swing.JButton();
btndisconnect = new javax.swing.JButton();
jLabel4 = new javax.swing.JLabel();
jSeparator1 = new javax.swing.JSeparator();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setResizable(false);
txtchat.setColumns(20);
txtchat.setEditable(false);
txtchat.setLineWrap(true);
txtchat.setRows(5);
txtchat.setBorder(javax.swing.BorderFactory.createEtchedBorder(new java.awt.Color(153, 204, 255), new java.awt.Color(204, 204, 255)));
jScrollPane1.setViewportView(txtchat);
txtkirimchat.setBorder(javax.swing.BorderFactory.createEtchedBorder(java.awt.Color.blue, new java.awt.Color(153, 204, 255)));
txtkirimchat.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txtkirimchatActionPerformed(evt);
}
});
jToolBar1.setBackground(new java.awt.Color(255, 255, 255));
jToolBar1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "status koneksi", javax.swing.border.TitledBorder.LEFT, javax.swing.border.TitledBorder.DEFAULT_POSITION));
jToolBar1.setFloatable(false);
jToolBar1.setRollover(true);
lblstatus.setBackground(new java.awt.Color(255, 0, 0));
lblstatus.setForeground(new java.awt.Color(255, 0, 0));
lblstatus.setText("Disconnect");
jToolBar1.add(lblstatus);
jToolBar1.add(txtstatususer);
txtip.setText("localhost");
txtip.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txtipActionPerformed(evt);
}
});
jLabel2.setText("IP : ");
jLabel3.setText("PORT : ");
txtport.setText("1234");
cbuser.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Server", "Client" }));
btnconnect.setText("Connect");
btnconnect.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnconnectActionPerformed(evt);
}
});
btndisconnect.setText("Disconnect");
btndisconnect.setEnabled(false);
btndisconnect.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btndisconnectActionPerformed(evt);
}
});
jLabel4.setText("Anda Sebagai : ");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 444, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(btnconnect)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(btndisconnect))
.addComponent(jLabel4)
.addComponent(jLabel3)
.addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 164, Short.MAX_VALUE)
.addComponent(txtport, javax.swing.GroupLayout.DEFAULT_SIZE, 164, Short.MAX_VALUE)
.addComponent(txtip, javax.swing.GroupLayout.DEFAULT_SIZE, 164, Short.MAX_VALUE)
.addComponent(jLabel2)
.addComponent(cbuser, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(txtkirimchat, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 242, Short.MAX_VALUE)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 242, Short.MAX_VALUE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtip, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtport, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(20, 20, 20)
.addComponent(jLabel4)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cbuser, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(43, 43, 43)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(btnconnect)
.addComponent(btndisconnect)))
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 247, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(7, 7, 7)
.addComponent(txtkirimchat, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(10, 10, 10)
.addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
);
pack();
}// </editor-fold>
private void txtkirimchatActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void txtipActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
public void actionPerformed(ActionEvent e) {
add(txtkirimchat);
txtkirimchat.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_ENTER) {
String s = txtkirimchat.getText();
if (!s.equals("")) {
try{
out.write(s);
out.newLine();
out.flush();
txtchat.append("Aku : " + s + "\n");
txtkirimchat.selectAll();
}catch(IOException h){
}
}
}
}
}
);
}
private void btnconnectActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here
statusKoneksi = 1;
rubahStatus(statusKoneksi);
user = cbuser.getSelectedIndex();
hostIP = txtip.getText();
port = Integer.parseInt(txtport.getText());
try {
if(user == 0){
//Jika yang masuk adalah server
hostServer = new ServerSocket(port);
socket = hostServer.accept();
System.out.println("saya server");
}else{
//Jika yang masuk adalah client
socket = new Socket(hostIP, port);
System.out.println("saya client");
}
//Membuka stream I/O dari socket yang sudah dibuka
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
Thread th ;
th = new Thread();//this nya dihapus
out.write("terkoneksi");
out.newLine();
th.start();
}
catch (IOException e) {
try {
tutupKoneksi();
} catch (IOException ex) {
Logger.getLogger(Chat.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public void run() {
try {
socket.setSoTimeout(100);
} catch (Exception e) {
}
while (true) {
try {
txtchat.append("x: " + in.readLine() + "\n");
System.out.println(in.readLine());
} catch (Exception h) {
}
}
}
private void btndisconnectActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
statusKoneksi = 0;
rubahStatus(statusKoneksi);
try {
tutupKoneksi();
} catch (IOException ex) {
Logger.getLogger(Chat.class.getName()).log(Level.SEVERE, null, ex);
}
}
private static void tutupKoneksi() throws IOException {
try {
if (hostServer != null) {
hostServer.close();
hostServer = null;
}
}
catch (IOException e) { hostServer = null; }
try {
if (socket != null) {
socket.close();
socket = null;
}
}
catch (IOException e) { socket = null; }
try {
if (in != null) {
in.close();
in = null;
}
}
catch (IOException e) { in = null; }
if (out != null) {
out.close();
out = null;
}
}
private void rubahStatus(int statusbaru){
if(statusKoneksi == 0){
btndisconnect.setEnabled(false);
btnconnect.setEnabled(true);
lblstatus.setText("Disconnect");
lblstatus.setForeground(Color.red);
txtstatususer.setVisible(false);
txtip.setEnabled(true);
txtport.setEnabled(true);
}
if(statusKoneksi == 1){
btndisconnect.setEnabled(true);
btnconnect.setEnabled(false);
lblstatus.setText("Connected");
lblstatus.setForeground(Color.blue);
txtstatususer.setVisible(true);
if(user == 0){
txtstatususer.setText(" Status : Server");
}
if(user == 1){
txtstatususer.setText(" Status : Client");
}
txtip.setEnabled(false);
txtport.setEnabled(false);
}
}
/* private static void MasukChatBox(String s) {
synchronized (textMasuk) {
textMasuk.append(s);
}
}*/
/* private static void sendString(String s) {
synchronized (textKeluar) {
textKeluar.append(s + "\n");
}
}*/
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Chat().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton btnconnect;
private javax.swing.JButton btndisconnect;
private javax.swing.JComboBox cbuser;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JToolBar jToolBar1;
private javax.swing.JLabel lblstatus;
private javax.swing.JTextArea txtchat;
private javax.swing.JTextField txtip;
private javax.swing.JTextField txtkirimchat;
private javax.swing.JTextField txtport;
private javax.swing.JLabel txtstatususer;
// End of variables declaration
}