Olá pessoal, preciso de uma ajuda, como sou “noob” em java, gostaria de saber como posso mesclar o codigo de um chat para intranet com um leitor xml, explicando melhor: gostaria que um unico programa lê-se o arquivo xml e o mostre linha a linha pra cada “enter” pressionado dentro do chat. e esse chat que eu tenho ele nao possibilita mais de um cliente por vez, apenas um cliente e o servidor, e não sei fazer isso também, se dessem pra vocês me ajudarem em algum dos itens citados ou em todos rsrsrs, agradeceria muito…OBRIGADO e segue os códigos:
CHAT - CLIENTE
import java.io.EOFException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class Client extends JFrame
{
private JTextField enterField; //insere informações fornecidas pelo usuário
private JTextArea displayArea; //exibe informações para o usuário
private ObjectOutputStream output; //gera fluxo de saída para o servidor
private ObjectInputStream input; //gera fluxo de entrada a partir do servidor
private String message = ""; //mensagem do servidor
private String chatServer; //servidor de host para esse aplicativo
private Socket client; //socket para comunicação com o servidor
//inicializa chatServer e configura a GUI
public Client( String host )
{
super( "Client" );
chatServer = host; //configura o servidor ao qual esse cliente se conecta
enterField = new JTextField(); //cria enterField
enterField.setEditable( false );
enterField.addActionListener(
new ActionListener()
{
//envia mensagem ao servidor
public void actionPerformed( ActionEvent event )
{
sendData( event.getActionCommand() );
enterField.setText( "" );
} //fim do método actionPerformed
} //fim da classe interna anônima
); //fim da chamada para addActionListener
//add( enterField, BorderLayout.NORTH );
getContentPane().add( enterField, BorderLayout.NORTH );
displayArea = new JTextArea(); //cria displayArea
getContentPane().add( new JScrollPane( displayArea ), BorderLayout.CENTER );
setSize( 300, 150 ); //configura o tamanho da janela
setVisible( true ); //mostra a janela
} //fim do construtor Client
//conecta-se ao servidor e processa as mensagens a partir do servidor
public void runClient()
{
try //conecta-se ao servidor, obtém fluxos, processa a conexão
{
connectToServer(); //cria um Socket para fazer a conexão
getStreams(); //obtém os fluxos de entrada e saída
processConnection(); //processa a conexão
} //fim do try
catch (EOFException eofException)
{
displayMessage( "\nClient terminated connection" );
} //fim do catch
catch (IOException ioException)
{
ioException.printStackTrace();
} //fim do catch
finally
{
closeConnection(); //fecha a conexão
} //fim do finally
} //fim do método runClient
//conecta-se ao servidor
private void connectToServer() throws IOException
{
displayMessage( "Attempting connection\n" );
//cria Socket para fazer a conexão ao servidor
client = new Socket( InetAddress.getByName( chatServer ), 12345 );
//exibe informações sobre a conexão
displayMessage( "Connected to: " +
client.getInetAddress().getHostName() );
} //fim do método connectToServer
//obtém fluxos para enviar e receber dados
private void getStreams() throws IOException
{
//configura o fluxo de saída para objetos
output = new ObjectOutputStream( client.getOutputStream() );
output.flush(); //esvazia buffer de saída para enviar as informações de cabeçalho
//configura o fluxo de entrada para objetos
input = new ObjectInputStream( client.getInputStream() );
displayMessage( "\nGot I/O streams\n" );
} //fim do método getStreams
//processa a conexão com o servidor
private void processConnection() throws IOException
{
//ativa enterField de modo que o usuário cliente possa enviar mensagens
setTextFieldEditable( true );
do //processa as mensagens enviadas do servidor
{
try //lê e exibe a mensagem
{
message = ( String ) input.readObject(); //lê uma nova mensagem
displayMessage( "\n" + message ); //exibe a mensagem
} //fim do try
catch (ClassNotFoundException classNotFoundException )
{
displayMessage( "\nUnknown object type received" );
} //fim do catch
} while ( !message.equals( "SERVER>>> TERMINATE" ) );
} //fim do método processConnection
//fecha os fluxos e o socket
private void closeConnection()
{
displayMessage( "\nClosing connection" );
setTextFieldEditable( false ); //desativa enterField
try
{
output.close(); //fecha o fluxo de saída
input.close(); //fecha o fluxo de entrada
client.close(); //fecha o socket
} //fim do try
catch ( IOException ioException )
{
ioException.printStackTrace();
} //fim do catch
} //fim do método closeConnection
//envia mensagem ao servidor
private void sendData( String message )
{
try //envia o objeto ao servidor
{
output.writeObject( "CLIENT>>> " + message );
output.flush(); //esvazia os dados para saída
displayMessage( "\nCLIENT>>> " + message );
} //fim do try
catch ( IOException ioException )
{
displayArea.append( "\nError writing object" );
} //fim do catch
} //fim do método sendData
//manipula a displayArea na thread de despacho de eventos
private void displayMessage( final String messageToDisplay )
{
SwingUtilities.invokeLater(
new Runnable()
{
public void run() //atualiza a displayArea
{
displayArea.append( messageToDisplay ); //acrescenta a mensagem
} //fim do método run
} //fim da classe interna anônima
); //fim da chamada para SwingUtilities.invokeLater
} //fim do método displayMessage
//manipula o enterField na thread de despacho de eventos
private void setTextFieldEditable( final boolean editable )
{
SwingUtilities.invokeLater(
new Runnable()
{
public void run() //configura a editabilidade do enterField
{
enterField.setEditable( editable );
} //fim do método run
} //fim da classe interna anônima
); //fim da chamada para SwingUtilities.invokeLater
} //fim do método setTextFieldEditable
} //fim da classe Client
CHAT - SERVIDOR
import java.io.EOFException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class Server extends JFrame
{
private JTextField enterField; //insere a mensagem do usuário
private JTextArea displayArea; //exibe informações para o usuário
private ObjectOutputStream output; //gera fluxo de saída para o cliente
private ObjectInputStream input; //gera fluxo de entrada a partir do cliente
private ServerSocket server; //socket de servidor
private Socket connection; //conexão com o cliente
private int counter = 1; //contador do número de conexões
//configura a GUI
public Server()
{
super( "Server" );
enterField = new JTextField(); //cria enterfield
enterField.setEditable( false );
enterField.addActionListener(
new ActionListener()
{
//envia a mensagem ao cliente
public void actionPerformed( ActionEvent event )
{
sendData( event.getActionCommand() );
enterField.setText( "" );
} //fim do método actionPerformed
} //fim da classe interna anônima
); //fim da chamada para addActionListener
//add( enterField, BorderLayout.NORTH );
getContentPane().add( enterField, BorderLayout.NORTH );
displayArea = new JTextArea(); //cria displayArea
getContentPane().add( new JScrollPane( displayArea ), BorderLayout.CENTER );
setSize( 300, 150 ); //configura o tamanho da janela
setVisible( true ); //mostra a janela
} //fim do construtor Server
//configura e executa o servidor
public void runServer()
{
try //configura o servidor para receber conexões; processa as conexões
{
server = new ServerSocket( 12345, 100 ); //cria ServerSocket
while ( true )
{
try
{
waitForConnection(); //espera uma conexão
getStreams(); //obtém fluxos de entrada e saída
processConnection(); //processa a conexão
} //fim do try
catch (EOFException eofException )
{
displayMessage( "\n Server terminated connection" );
} //fim do catch
finally
{
closeConnection(); //fecha a conexão
counter++;
} //fim do finally
} //fim do while
} //fim do try
catch (IOException ioException )
{
ioException.printStackTrace();
} //fim do catch
} // fim do método runServer
//espera que a conexão chegue e então exibe informações sobre a conexão
private void waitForConnection() throws IOException
{
displayMessage( "Waiting for connection\n" );
connection = server.accept(); //permite que o servidor aceite a conexão
displayMessage( " Connection " + counter + " received from: " +
connection.getInetAddress().getHostName() );
} //fim do método waitForConnection
//obtém fluxos para evitar a receber dados
private void getStreams() throws IOException
{
//configura o fluxo de saída para objetos
output = new ObjectOutputStream( connection.getOutputStream() );
output.flush(); //esvazia buffer de saída para enviar as informações de cabeçalho
//configura o fluxo de entrada para objetos
input = new ObjectInputStream( connection.getInputStream() );
displayMessage( "\nGot I/O streams\n" );
} //fim do método getStreams
//processa a conexão com o cliente
private void processConnection() throws IOException
{
String message = "Connection successful";
sendData( message ); //envia uma mensagem de conexão bem-sucedida
//ativa enterField de modo que usuário doservidor possa enviar mensagens
setTextFieldEditable( true );
do //processa as mensagens enviadas pelo cliente
{
try //lê e exibe a mensagem
{
message = ( String ) input.readObject(); //lê uma nova mensagem
displayMessage( "\n" + message ); //exibe a mensagem
} //fim do try
catch ( ClassNotFoundException classNotFoundException )
{
displayMessage( "\nUnknown object type received" );
} //fim do catch
} while ( !message.equals( "CLIENT>>> TERMINATE" ) );
} //fim do método processConnection
//fecha os fluxos e o socket
private void closeConnection()
{
displayMessage( "\nTerminating connection\n " );
setTextFieldEditable( false ); //desativa enterField
try
{
output.close(); //fecha o fluxo de saída
input.close(); //fecha o fluxo de entrada
connection.close(); //fecha o socket
} //fim do try
catch ( IOException ioException )
{
ioException.printStackTrace();
} //fim do catch
} //fim do método closeConnection
//envia a mensagem ao cliente
private void sendData( String message )
{
try //envia o objeto ao cliente
{
output.writeObject( "SERVER>>> " + message );
output.flush(); //esvazia a saída para o cliente
displayMessage( "\nSERVER>>> " + message );
} //fim do try
catch ( IOException ioException )
{
displayArea.append( "\nError writting object" );
} //fim do catch
} //fim do método sendData
//manipula a displayArea na thread de despacho de eventos
private void displayMessage( final String messageToDisplay )
{
SwingUtilities.invokeLater(
new Runnable()
{
public void run() //atualiza a displayArea
{
displayArea.append( messageToDisplay ); //acrescenta a mensagem
} //fim do método run
} //fim da classe interna anônima
); //fim da chamada para SwingUtilities.invokeLater
} //fim do método displayMessage
//manipula o enterField na thread de despacho de eventos
private void setTextFieldEditable( final boolean editable )
{
SwingUtilities.invokeLater(
new Runnable()
{
public void run() //configura a editabilidade do enterField
{
enterField.setEditable( editable );
} //fim do método run
} //fim da classe interna anônima
); //fim da chamada para SwingUtilities.invokeLater
} //fim do método setTextFieldEditable
} //fim da classe Server
XML
final class Sink extends org.xml.sax.helpers.DefaultHandler implements org.xml.sax.ContentHandler
{
final private static void print ( final String context, final String text )
{
System.out.println( context + ": \"" + text + "\"." );
}
final public void startElement ( final String namespace, final String localname, final String type, final org.xml.sax.Attributes attributes ) throws org.xml.sax.SAXException
{
print( "startElement", type );
}
final public void endElement ( final String namespace, final String localname, final String type ) throws org.xml.sax.SAXException
{
print( "endElement ", type );
}
final public void characters ( final char[] ch, final int start, final int len )
{
final String text = new String( ch, start, len );
final String text1 = text.trim();
if( text1.length() > 0 )
print( "characters ", text1 );
}
}
final class XML
{ /** create a new XML reader */
final public static org.xml.sax.XMLReader makeXMLReader() throws Exception
{
final javax.xml.parsers.SAXParserFactory saxParserFactory = javax.xml.parsers.SAXParserFactory.newInstance(); final javax.xml.parsers.SAXParser saxParser = saxParserFactory.newSAXParser(); final org.xml.sax.XMLReader parser = saxParser.getXMLReader(); return parser; }}
public class Teste {
public static void main( final String [] args ) throws Exception {
org.xml.sax.XMLReader reader = XML.makeXMLReader();
reader.setContentHandler( new Sink() );
reader.parse( new org.xml.sax.InputSource( "roteiro.xml" ));
}
}
Se postei errado alguma coisa me avisem por favor…OBRIGADO ^^
EDIT - Por favor, use os tags [ CODE ] quando for postar código.