When I start program without tcp server, my program work correctly but when tcp server gets involved my second gui screen is not working. I am asking why do I have such a problem.How to make server ready.
This my ServerClass;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
private ServerSocket serverSocket;
public Server(ServerSocket serverSocket) {
this.serverSocket = serverSocket;
}
public void startServer() {
try {
while (!serverSocket.isClosed()) {
Socket socket = serverSocket.accept();
System.out.println("Bağlandı");
ClientHandler clientHandler = new ClientHandler(socket);
}
} catch (IOException e) {
}
}
public static void main(String[] args) {
Svg svg = new Svg();
svg.getjBaslat().addActionListener(new ActionListener() {
int rectNo;
@Override
public void actionPerformed(ActionEvent e) {
if (svg.getRectNo().getText().equals("")) {
rectNo = 0;
} else {
rectNo = Integer.parseInt(svg.getRectNo().getText());
}
svg.setVis();
DrawShapes dShapes = new DrawShapes(rectNo);
try {
ServerSocket serverSocket = new ServerSocket(9090);
Server server = new Server(serverSocket);
server.startServer();
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
}
}
ClientHandler Class;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.ArrayList;
public class ClientHandler {
public static ArrayList<ClientHandler> clientHandlers = new ArrayList<>();
private Socket socket;
private BufferedReader bufferedReader;
private BufferedWriter bufferedWriter;
public ClientHandler(Socket socket) {
try {
this.socket = socket;
this.bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
this.bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
clientHandlers.add(this);
}catch (IOException e) {
closeEverything(socket, bufferedReader, bufferedWriter);
}
}
public void removeClientHandler() {
clientHandlers.remove(this);
}
public void closeEverything(Socket socket, BufferedReader bufferedReader, BufferedWriter bufferedWriter) {
removeClientHandler();
try {
if(bufferedReader != null) {
bufferedReader.close();
}if (bufferedWriter != null) {
bufferedWriter.close();
}if(socket != null) {
socket.close();
}
}catch(IOException e) {
e.printStackTrace();
}
}
}
Gui1 Class;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class Gui1 {
private JFrame jFrame;
private JLabel jRect;
private JButton jStart;
private JTextField rectNo;
public Gui1() {
jFrame = new JFrame("Title");
jRect = new JLabel("Rect Number:");
jStart = new JButton("Start");
rectNo = new JTextField();
jRect.setBounds(10, 10, 120, 30);
jStart.setBounds(150, 40, 80, 25);
rectNo.setBounds(150, 10, 80, 30);
rectNo.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
String value = rectNo.getText();
int i = value.length();
if (e.getKeyChar() >= '0' && e.getKeyChar() <= '9') {
rectNo.setEditable(true);
}else {
rectNo.setEditable(false);
rectNo.setText(""); }
}
});
jFrame.add(jRect);
jFrame.add(jStart);
jFrame.add(rectNo);
jFrame.setSize(250,125);
jFrame.setLayout(null);
jFrame.setDefaultCloseOperation(3);
jFrame.setResizable(false);
jFrame.setVisible(true);
}
public JButton getjBaslat() {
return jStart;
}
public JTextField getRectNo() {
return rectNo;
}
public JFrame getjFrame() {
return jFrame;
}
public void setVis() {
if(jFrame.isVisible()) {
jFrame.setVisible(false);
}else {
jFrame.setVisible(true);
}
}
}
DrawShapes Class;
import javax.swing.JFrame;
public class DrawShapes extends JFrame {
private final static int GENISLIK = 800;
private final static int YUKSEKLIK = 600;
public DrawShapes(int x) {
setSize(GENISLIK, YUKSEKLIK);
setTitle("Sunucu");
setResizable(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Panel panel = new Panel(x);
add(panel);
setVisible(true);
}
}
Panel Class;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Panel extends JPanel implements ActionListener {
private List<Object> sekil = new ArrayList<>();
Timer timer;
public Panel(int x) {
this.setFocusable(true);
timer = new Timer(20, this);
timer.start();
addRect(x);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
for (Object s : sekil) {
if (s instanceof Rect) {
((Rect) s).paint(g);
}
}
}
public void update() {
for (Object s : sekil) {
if (s instanceof Rect) {
((Rect) s).update();
}
}
}
@Override
public void actionPerformed(ActionEvent e) {
repaint();
update();
}
private void addRect(int i) {
for (int a = 0; a < i; a++) {
sekil.add(new Rect());
}
}
}
React Class;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
public class Rect {
private final static int GENISLIK = 800;
private final static int YUKSEKLIK = 600;
private final static int eksi = 20;
Random r = new Random();
int x = r.nextInt(670);
int y = r.nextInt(525);
int genislik = (int) Math.floor(Math.random() * (70 - 20 + 1) + 20);
int yukseklik = (int) Math.floor(Math.random() * (50 - 15 + 1) + 15);
int adım = (int) Math.floor(Math.random() * (10 - 1 + 1) + 1);
float f1 = r.nextFloat();
float f2 = r.nextFloat() / 2f;
float f3 = r.nextFloat() / 2f;
public void paint(Graphics g) {
Color rastgeleRenk = new Color(f1, f2, f3);
g.setColor(rastgeleRenk);
g.fillRect(x, y, genislik, yukseklik);
}
public void update() {
if ((x + genislik) > (GENISLIK - eksi) || x < 0) {
adım = -adım;
}
x = x + adım;
}
}
I tried so many different ways to solve this problem but I can't see my fault. Maybe I made mistake thread section or made server connection false. I don't find any solution.
Thanks to all concerned.