Pessoal, tenho um Client e um Server, de tipo um msn…
Client:
[code]public class Client extends JFrame {
////////////////////////////////////////////////////////////////////////////
private static Client instance = new Client(“127.0.0.1”);
////////////////////////////////////////////////////////////////////////////
public JTextField enterField;
public JTextArea displayArea;
public ObjectOutputStream output;
public ObjectInputStream input;
public String message = "";
public String chatServer;
public Socket client;
//inicializa chatServer e configura a GUI
private Client(String host) { ///////////////////////aki vai pra public
super("Cliente (ENVIA MENSAGEM)");
chatServer = host;
enterField = new JTextField();
enterField.setEditable(false);
enterField.addActionListener(
new ActionListener() {
//envia a mensagem ao servidor
public void actionPerformed (ActionEvent event)
{
sendData(event.getActionCommand());
enterField.setText("");
}
}
);
add(enterField, BorderLayout.NORTH);
displayArea = new JTextArea();
add(new JScrollPane(displayArea), BorderLayout.CENTER);
setSize(300,150);
setVisible(true);
}
/////////////////////////////////////////////////////////
public static Client getInstance() {
// instance.runClient();
return instance;
}
/////////////////////////////////////////////////////////
//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();
getStreams();
processConnection();
}
catch (EOFException eofException)
{
displayMessage("\nConexão Terminada");
}
catch(IOException ioException) {
ioException.printStackTrace();
}
finally
{
closeConnection();
}
}
//conecta-se ao servidor
public void connectToServer() throws IOException {
displayMessage("Conectando\n");
client = new Socket(InetAddress.getByName(chatServer), 12345);
displayMessage("\Conectado a: " + client.getInetAddress().getHostName());
}
//obtém fluxos para enviar e receber dados
public void getStreams() throws IOException
{
output = new ObjectOutputStream(client.getOutputStream());
output.flush();
input = new ObjectInputStream(client.getInputStream());
}
//processa a conexão com o servidor
public void processConnection() throws IOException {
setTextFieldEditable(true);
do //processa as mensagens enviadas do servidor
{
try //le e exibe a mensagem
{
message = (String) input.readObject();
displayMessage("\n+ message");
}
catch (ClassNotFoundException classNotFoundException)
{
displayMessage("\nUnknown objetct type received");
}
} while (!message.equals("SERVER>>> TERMINATE"));
}
//fecha os fluxos e o socket
public void closeConnection() {
displayMessage("\nClosing connection");
setTextFieldEditable(false);
try {
output.close();
input.close();
client.close();
}
catch (IOException ioException) {
ioException.printStackTrace();
}
}
//envia mensagem ao servidor
public void sendData(String message) {
try //envia o objeto ao servidor
{
output.writeObject("MESA 01 >>" +message);
output.flush();
displayMessage("MESA 01 >>" +message);
}
catch (IOException ioException) {
displayArea.append("\nError writing object");
}
}
//manipula a displayArea na thread de despacho de eventos
public void displayMessage(final String messageToDisplay) {
SwingUtilities.invokeLater(
new Runnable() {
public void run()
{
displayArea.append(messageToDisplay);
}
}
);
}
//manipula o enterField na thread de despacho de eventos
public void setTextFieldEditable(final boolean editable)
{
SwingUtilities.invokeLater(
new Runnable() {
public void run()
{
enterField.setEditable(editable);
}
}
);
}
/////////////////////////////////////////////////////////////////// /*
public static void main (String args[]) {
getInstance().runClient();
}
///////////////////////////////////////////////////////////////////
}[/code]
Ele roda certinho…
Agora eu quero chamar o Client quando eu clicar num botão de outro frame…
Coloquei isso:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Client.getInstance().runClient();
}
Mas não dá certo…
Algo me diz que é porque o client é frame também… não sei…
O que posso fazer?