olá colegas,
estou ocm o seguinte problema:
preciso de um chat java que rode via applet num servidor apache.
fiz um applet com sockets, o mesmo do livro “use a cabeça”.
porém não roda o applet na web devido a restrições dos applets.
preciso de alguma adaptação ou outra sugestão de como fazer isto.
segue o cliente:
public class Cliente extends JApplet implements Runnable {
/** Initializes the applet Cliente */
public void init() {
try {
java.awt.EventQueue.invokeAndWait(new Runnable() {
public void run() {
initComponents();
setUpNetworking();
Thread readerThread = new Thread(new IncomingReader());
readerThread.start();
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
conversa = new javax.swing.JTextArea();
jScrollPane2 = new javax.swing.JScrollPane();
enviar = new javax.swing.JTextArea();
brEnviar = new javax.swing.JButton();
jPanel1.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
conversa.setColumns(20);
conversa.setEditable(false);
conversa.setLineWrap(true);
conversa.setRows(5);
conversa.setWrapStyleWord(true);
jScrollPane1.setViewportView(conversa);
enviar.setColumns(20);
enviar.setLineWrap(true);
enviar.setRows(5);
enviar.setWrapStyleWord(true);
jScrollPane2.setViewportView(enviar);
brEnviar.setText("enviar");
brEnviar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
brEnviarActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 955, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addGap(21, 21, 21)
.addComponent(brEnviar)
.addGap(26, 26, 26)
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(595, 595, 595))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 341, Short.MAX_VALUE)
.addGap(604, 604, 604))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(24, 24, 24)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(37, 37, 37)
.addComponent(brEnviar))
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(1266, 1266, 1266))
);
}
private void brEnviarActionPerformed(java.awt.event.ActionEvent evt) {
try {
// System.out.println(enviar.getText());
writer.println(enviar.getText());
writer.flush();
} catch (Exception e) {
System.out.println("erro no actionListner "+ e);
}
enviar.setText("");
enviar.requestFocus();
}
public void run() {
//metodo run para utilizar como thread
this.init();
}
public class IncomingReader implements Runnable{
public void run() {
String message;
try {
while ((message = reader.readLine()) != null) {
//System.out.println("lendo "+ message);
conversa.append(message + "\n");
}
} catch (Exception e) {
System.out.println("erro no imcomingReader "+ e);
}
}
}
private void setUpNetworking(){
try {
sock = new Socket("127.0.0.1", 5000);
InputStreamReader streamReader = new InputStreamReader(sock.getInputStream());
reader = new BufferedReader(streamReader);
writer = new PrintWriter(sock.getOutputStream());
System.out.println("conexão estabelecida!");
} catch (Exception e) {
System.out.println(" erro no setUpNetworking "+ e);
}
}
private javax.swing.JButton brEnviar;
private javax.swing.JTextArea conversa;
private javax.swing.JTextArea enviar;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
BufferedReader reader;
PrintWriter writer;
Socket sock;
}
agora a classe servidor:
public class VerySimpleChatServer implements Runnable{
ArrayList clienteOutputStreams;
public void run() {
go();
}
public class ClienteHandler implements Runnable{
BufferedReader reader;
Socket sock;
public ClienteHandler(Socket clientsocket){
sock = clientsocket;
try {
InputStreamReader isReader;
isReader = new InputStreamReader(sock.getInputStream());
reader = new BufferedReader(isReader);
} catch (IOException ex) {
System.out.println("erro no ClientHandler " + ex);
}
}
public void run() {
String message;
try {
while ((message = reader.readLine()) != null) {
System.out.println("lendo no servidor "+ message);
tellEveryone(message);
}
} catch (Exception e) {
}
}
}
public static void main(String[] args) {
new VerySimpleChatServer().go();
}
public void go(){
clienteOutputStreams = new ArrayList();
try {
ServerSocket serverSocket = new ServerSocket(5000);
while(true){
Socket clientSocket = serverSocket.accept();
PrintWriter writer = new PrintWriter(clientSocket.getOutputStream());
clienteOutputStreams.add(writer);
Thread t = new Thread(new ClienteHandler(clientSocket));
t.start();
System.out.println("conectando");
}
} catch (Exception ex) {
System.out.println("erro no metodo go "+ ex);
}
}
public void tellEveryone(String message){
Iterator it = clienteOutputStreams.iterator();
while (it.hasNext()) {
try {
PrintWriter writer = (PrintWriter) it.next();
writer.println(message);
writer.flush();
} catch (Exception e) {
System.out.println("erro no tellEveryone "+ e);
}
}
}
}
pela ferramente netbeans executando primeiro o servidor, e depois o cliente (ou os clientes roda bonitinho).
ja no browser não.
obrigado