קוד:
/* * To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication1;
import com.sun.corba.se.pept.transport.ListenerThread;
import java.net.*;
import java.io.*;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import sun.nio.cs.ext.ISCII91;
import java.lang.String;
import javax.swing.*;
/**
*
* @author Aviv
*/
public class NewJFrame extends javax.swing.JFrame {
String username;
Socket sock;
BufferedReader reader;
PrintWriter writer;
ArrayList<String> userList = new ArrayList();
Boolean isConnected = false;
/**
* Creates new form NewJFrame
*/
public NewJFrame() {
initComponents();
}
private void ListenerThread() {
throw new UnsupportedOperationException("Not yet implemented");
}
public class IncomingReader implements Runnable{
public void run(){
String stream;
String[] data;
String done = "Done", connect = "Connect", disconnect = "Disconnect", chat = "Chat";
try {
while ((stream = reader.readLine()) != null){
data = stream.split("Y");
if (data[2].equals(chat)){
chatTextarea.append(data[0] + "; " + data[1] + "\n");
}else if (data[2].equals(connect)){
chatTextarea.removeAll();
userAdd(data[0]);
} else if(data[2].equals(disconnect)) {
userRemove(data[0]);
}else if(data[2].equals(done)){
}
userslist.setText("");
writeUsers();
userList.clear();
}
} catch (Exception ex) {
}
}
}
public void ListenThread() {
Thread IncomingReader = new Thread(new IncomingReader());
IncomingReader.start();
}
private void userAdd(String data) {
userList.add(data);
}
private void userRemove(String string) {
throw new UnsupportedOperationException("Not yet implemented");
}
public void writeUsers() {
String[] tempList = new String[(userList.size())];
userList.toArray(tempList);
for (String token:tempList) {
userslist.append(token + "\n");
}
}
public void sendDisconnect() {
String bye = (username + "Y YDisconnect");
try{
writer.println(bye);
writer.flush();
}catch (Exception e) {
chatTextarea.append("Disconnect Message Failed! \n");
}
}
public void Disconnect() {
try {
chatTextarea.append("Disconnected!.\n");
sock.close();
} catch(Exception ex) {
chatTextarea.append("Disconnect Failed! \n");
}
isConnected = false;
usernamefield.setEditable(true);
}
public JTextArea getChatTextarea() {
return chatTextarea;
}
public void setChatTextarea(JTextArea chatTextarea) {
this.chatTextarea = chatTextarea;
}
public JButton getConnectbutton() {
return connectbutton;
}
public void setConnectbutton(JButton connectbutton) {
this.connectbutton = connectbutton;
}
public JButton getDisconnectbutton() {
return disconnectbutton;
}
public void setDisconnectbutton(JButton disconnectbutton) {
this.disconnectbutton = disconnectbutton;
}
public JTextArea getinputtextarea() {
return inputtextarea;
}
public void setinputtextarea(JTextArea inputtextarea) {
this.inputtextarea = inputtextarea;
}
public Boolean getIsConnected() {
return isConnected;
}
public void setIsConnected(Boolean isConnected) {
this.isConnected = isConnected;
}
public JLabel getjLabel1() {
return jLabel1;
}
public void setjLabel1(JLabel jLabel1) {
this.jLabel1 = jLabel1;
}
public JLabel getjLabel2() {
return jLabel2;
}
public void setjLabel2(JLabel jLabel2) {
this.jLabel2 = jLabel2;
}
public JScrollPane getjScrollPane1() {
return jScrollPane1;
}
public void setjScrollPane1(JScrollPane jScrollPane1) {
this.jScrollPane1 = jScrollPane1;
}
public JScrollPane getjScrollPane2() {
return jScrollPane2;
}
public void setjScrollPane2(JScrollPane jScrollPane2) {
this.jScrollPane2 = jScrollPane2;
}
public JScrollPane getjScrollPane3() {
return jScrollPane3;
}
public void setjScrollPane3(JScrollPane jScrollPane3) {
this.jScrollPane3 = jScrollPane3;
}
public BufferedReader getReader() {
return reader;
}
public void setReader(BufferedReader reader) {
this.reader = reader;
}
public JButton getSendbutton() {
return sendbutton;
}
public void setSendbutton(JButton sendbutton) {
this.sendbutton = sendbutton;
}
public Socket getSock() {
return sock;
}
public void setSock(Socket sock) {
this.sock = sock;
}
public ArrayList<String> getUserList() {
return userList;
}
public void setUserList(ArrayList<String> userList) {
this.userList = userList;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public JTextField getUsernamefield() {
return usernamefield;
}
public void setUsernamefield(JTextField usernamefield) {
this.usernamefield = usernamefield;
}
public JTextArea getUserslist() {
return userslist;
}
public void setUserslist(JTextArea userslist) {
this.userslist = userslist;
}
public PrintWriter getWriter() {
return writer;
}
public void setWriter(PrintWriter writer) {
this.writer = writer;
}
/**
* 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() {
jLabel1 = new javax.swing.JLabel();
usernamefield = new javax.swing.JTextField();
connectbutton = new javax.swing.JButton();
disconnectbutton = new javax.swing.JButton();
jLabel2 = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
userslist = new javax.swing.JTextArea();
jScrollPane2 = new javax.swing.JScrollPane();
chatTextarea = new javax.swing.JTextArea();
jScrollPane3 = new javax.swing.JScrollPane();
inputtextarea = new javax.swing.JTextArea();
sendbutton = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setText("Username");
usernamefield.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
usernamefieldActionPerformed(evt);
}
});
connectbutton.setText("Connect");
connectbutton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
connectbuttonActionPerformed(evt);
}
});
disconnectbutton.setText("Disconnect");
disconnectbutton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
disconnectbuttonActionPerformed(evt);
}
});
jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel2.setText("Online Now!");
userslist.setColumns(20);
userslist.setEditable(false);
userslist.setRows(5);
jScrollPane1.setViewportView(userslist);
chatTextarea.setColumns(20);
chatTextarea.setEditable(false);
chatTextarea.setLineWrap(true);
chatTextarea.setRows(5);
jScrollPane2.setViewportView(chatTextarea);
inputtextarea.setColumns(20);
inputtextarea.setRows(5);
jScrollPane3.setViewportView(inputtextarea);
sendbutton.setText("Send!");
sendbutton.setToolTipText("");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane2)
.addGroup(layout.createSequentialGroup()
.addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 321, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(sendbutton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addGap(11, 11, 11)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 159, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(5, 5, 5))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(usernamefield, javax.swing.GroupLayout.PREFERRED_SIZE, 133, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(connectbutton)
.addGap(26, 26, 26)
.addComponent(disconnectbutton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel2)
.addGap(59, 59, 59))))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(usernamefield, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(connectbutton)
.addComponent(disconnectbutton)
.addComponent(jLabel2))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 335, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 74, Short.MAX_VALUE)
.addComponent(sendbutton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addComponent(jScrollPane1)
.addGap(22, 22, 22))))
);
pack();
}// </editor-fold>
private void usernamefieldActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void disconnectbuttonActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
sendDisconnect();
Disconnect();
}
private void connectbuttonActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if(isConnected == false){
username = usernamefield.getText();
usernamefield.setEditable(false);
try {
sock = new Socket("127.0.0.1", 5000);
InputStreamReader streamreader = new InputStreamReader (sock.getInputStream());
reader = new BufferedReader(streamreader);
writer = new PrintWriter (sock.getOutputStream());
writer.println(username + "Succesfully connected!");
writer.flush();
isConnected = true;
} catch (Exception e) {
chatTextarea.append("Could not connect! Try Again!");
usernamefield.setEditable(true);
}
ListenerThread();
}else if (isConnected == true) {
chatTextarea.append("You Are Already Connected! /n");
}
}
/**
* @param args the command line arguments
*/
// Variables declaration - do not modify
private javax.swing.JTextArea chatTextarea;
private javax.swing.JButton connectbutton;
private javax.swing.JButton disconnectbutton;
private javax.swing.JTextArea inputtextarea;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JButton sendbutton;
private javax.swing.JTextField usernamefield;
private javax.swing.JTextArea userslist;
// End of variables declaration
}