Не создается до конца клиент

158
23 февраля 2019, 02:10

При создании клиента очень часто фрэйм не создается до конца, исключения не выкидываются

код клиента:

package client;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneLayout;
import javax.swing.border.Border;
import javax.swing.border.TitledBorder;
public class Client extends JFrame {
String name;
Socket socket;
BufferedReader br;
DataOutputStream oos;
DataInputStream ois; 
String in;
String outMessage;
JFrame mainFrame = new JFrame ("Client v1.0");
JPanel pan = new JPanel();
JTextArea area = new JTextArea();    
JScrollPane scrollPane = new JScrollPane (area, `JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
JTextField message = new JTextField(10);
JButton button = new JButton ("Send");
public static void main (String [] args) {    
    new Client().clientwork(); 
} 

public synchronized void clientwork () {
    try {
    this.makeFrame();
    socket = new Socket ("localhost", 3345);
    oos = new DataOutputStream (socket.getOutputStream());
    ois = new DataInputStream (socket.getInputStream());       

    this.setTextArea("You connect to socket \n");
    this.setTextArea("Your's DataInputStream and DataOutputStream are initialized \n");
    //Запуск потока-слушателя
    Thread read = new Thread (new ClientReader());
    read.start();        
    }       
    catch (Exception e) {e.printStackTrace();}                        
    }
public synchronized void setTextArea (String text) {
    area.append(text);
}
public synchronized void makeFrame () {       
    mainFrame.setSize(300, 400);
    mainFrame.setResizable(false);
    mainFrame.setVisible(true);
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mainFrame.add(pan);
    Border br = BorderFactory.createLineBorder(Color.BLACK, 1);
    Border br1 = BorderFactory.createTitledBorder(br, "chat window", TitledBorder.CENTER, TitledBorder.ABOVE_TOP );`
    area.setEditable(false);
    area.setLineWrap(true);
    area.setMaximumSize(scrollPane.getMaximumSize());
    area.setAlignmentX(Component.CENTER_ALIGNMENT);
    area.setLineWrap(true);
    area.setWrapStyleWord(true);
    message.setMaximumSize(new Dimension(280, 30));
    message.setAlignmentX(Component.CENTER_ALIGNMENT);
    scrollPane.setSize(new Dimension (250,200));
    scrollPane.setLayout(new ScrollPaneLayout());
    scrollPane.setBorder(br1);
    pan.setLayout(new BoxLayout(pan, BoxLayout.PAGE_AXIS));
    pan.add(Box.createVerticalStrut(10));
    pan.add(message);
    pan.add(scrollPane);        
    pan.add(Box.createRigidArea(new Dimension (200, 40)));
    pan.add(Box.createVerticalStrut(20));
    pan.add(message);
    button.setAlignmentX(Component.CENTER_ALIGNMENT);
    pan.add(Box.createVerticalStrut(20));
    pan.add(button);
    pan.add(Box.createVerticalStrut(20));
    button.addActionListener(new ActionListener () {
        @Override
        public synchronized void actionPerformed(ActionEvent e) {
            try {                      
                outMessage=message.getText();                                        
                if (outMessage.equalsIgnoreCase("exit")) {                    
                    setTextArea("client killed connection \n");                       
                    //System.out.println("Closing connection and channels DONE");
                    setTextArea("Closing connection and channels DONE \n");
                    oos.flush();
                    oos.close();
                    ois.close();
                    mainFrame.dispose();
                    socket.close();
            }                     
                oos.writeUTF(outMessage);
                oos.flush();
                message.setText("");
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            finally {
            try {
                oos.flush();
                oos.close();
                ois.close();
                mainFrame.dispose();
            } 
            catch (IOException ex) {ex.printStackTrace();}
            } 
        }
    }
    );  
}    
public class ClientReader implements Runnable {
    @Override
    public synchronized void run () {
        try {
           ois = new DataInputStream (socket.getInputStream()); 
           while (true) {
               String entry=ois.readUTF();
               setTextArea(entry+"\n");
               System.out.println(entry); 
           }
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        finally {
            try {ois.close();} 
            catch (IOException ex) {ex.printStackTrace();}
        } 
    }
} 
}

код сервера:

package server2;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class Server2 {
static ArrayList <SimpleServer> servers = new ArrayList <SimpleServer>();
Socket client;
public static void main(String[] args) {
    new Server2().go();
}
public void go () {
    try {
        ServerSocket server = new ServerSocket(3345);
        System.out.println("connection accepted");
        System.out.println("DataInputStream and DataOutputStream created");
        while (!server.isClosed()) { 
            System.out.println("Server reading from channel");                
            client = server.accept();
            SimpleServer s = new SimpleServer(client);
            s.start();
            servers.add(s);
            System.out.println("Connection accepted."); 
        }             
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}
private class SimpleServer extends Thread {
private Socket client;
private String name;
private boolean fl;
private DataOutputStream out;
private DataInputStream in;
public SimpleServer (Socket client) {
    this.client=client;
}

private void writeToAll (ArrayList <SimpleServer> monoServer, String smth) throws IOException {
    for (SimpleServer sr : monoServer)  {
        sr.out.writeUTF(smth);
        sr.out.flush();
    }
}
    @Override
    public synchronized void run() {
        try {
            out = new DataOutputStream (client.getOutputStream());
            in = new DataInputStream (client.getInputStream()); 
            while (true) {
                //ask client's name
                while (fl==false) {
                   out.writeUTF("write your name");
                   name=in.readUTF();
                   writeToAll(servers, name+" came to chat"); 
                   this.out.writeUTF("Welcome to chat "+name+"\n");
                   System.out.println(name+" came to chat");
                   fl=true;
                }   
                String entry=in.readUTF();
                writeToAll(servers, name+": "+entry);
                System.out.println(name+": "+entry);
                if (entry.equalsIgnoreCase("exit")) {
                System.out.println("client write EXIT - client disconnectred");              
                System.out.println("closing connection and channel");
                System.out.println("closing connection and channel done"); 
                break;
            }        
        }
        in.close();
        out.flush();
        out.close();
        client.close();  
        this.interrupt();            
        }
        catch (Exception e) { e.printStackTrace(); }
        finally {
            try {
            in.close();
            out.flush();
            out.close();
            }
            catch (Exception e) {}
        }
    }
}        
}
READ ALSO
Конфигурация hibernate без использования xml

Конфигурация hibernate без использования xml

Каким образом возможно сконфигурировать EntityManager в Hibernate без использования persistencexml? Может есть подход создания конфигурации через аннотации...

157
Помощь с разъяснением кода

Помощь с разъяснением кода

Есть задание, оно уже решено и работает как нужно при вводе с клавиатуры, но код задания автоматически предлагает проверку без использования...

184
Как вставить комментарий в XML документ?

Как вставить комментарий в XML документ?

Ниже код моей функцииВозможно, моя проблема заключается в том, что я неправильно понял как работает insertBefore

199