При создании клиента очень часто фрэйм не создается до конца, исключения не выкидываются
код клиента:
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) {}
}
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Каким образом возможно сконфигурировать EntityManager в Hibernate без использования persistencexml? Может есть подход создания конфигурации через аннотации...
Есть задание, оно уже решено и работает как нужно при вводе с клавиатуры, но код задания автоматически предлагает проверку без использования...
Ниже код моей функцииВозможно, моя проблема заключается в том, что я неправильно понял как работает insertBefore