Reputation: 501
server.java
ok, so the problem is: When I hit the start button, the gui "froze", but the server is working, I have an output in console. I think I should use threads for it, but I don't know how to implement it = /
void Runer() throws Exception
{
ServerSocket welcomeSocket = new ServerSocket(6789);
System.out.println("welcome into server");
while(true)
{
Socket connectionSocket = welcomeSocket.accept();
if (connectionSocket != null)
{
System.out.println(connectionSocket);
Client client = new Client(connectionSocket);
client.start();
}
}
}
}
class Client extends Thread
{
private Socket connectionSocket;
private String pozX;
private String ans;
private String pozY;
private String capitalizedSentence;
private BufferedReader inFromClient;
private DataOutputStream outToClient;
public Client(Socket c) throws IOException
{
connectionSocket = c;
}
public void run()
{
try
{
inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
outToClient = new DataOutputStream(connectionSocket.getOutputStream());
pozX = inFromClient.readLine();
pozY = inFromClient.readLine();
System.out.println(pozX);
System.out.println(pozY);
capitalizedSentence = pozX.toUpperCase() + '\n';
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
outToClient.writeBytes(capitalizedSentence);
}
catch(IOException e)
{
System.out.println("Errore: " + e);
}
}
gui.java
JPanel GuiServera(){
JPanel panel = new JPanel();
area = new JTextArea();
area.setColumns(20);
area.setRows(10);
area.setText("The log is logging injoy");
panel.setLayout(null);
start = new JButton("Start");
start.addActionListener(list);
panel.add(start);
stop = new JButton("Stop");
stop.addActionListener(list);
pane = new JButton("Admin Panel");
panel.add(stop);
panel.add(pane);
scrolled = new JScrollPane(area);
panel.add(scrolled);
Insets insets = panel.getInsets();
Dimension size = start.getPreferredSize();
start.setBounds(40 + insets.left, 20 + insets.top,
size.width, size.height);
size = stop.getPreferredSize();
stop.setBounds(40 + insets.left, 60 + insets.top,
size.width, size.height);
size = pane.getPreferredSize();
pane.setBounds(40 + insets.left, 100 + insets.top,
size.width, size.height);
size = scrolled.getPreferredSize();
scrolled.setBounds(160 + insets.left, 20 + insets.top,
size.width, size.height);
return panel;
}
class Nasluchiwacz implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==start){
System.out.println("start");
area.append("start button\n");
try {
inzServer.Runer();
} catch (Exception ex) {
Logger.getLogger(Gui.class.getName()).log(Level.SEVERE, null, ex);
}
}
else if (e.getSource()==stop){
area.setText(area.getText()+"\nstop\n");
}
}
}
Upvotes: 0
Views: 937
Reputation: 783
You are almost doing it correct. Instead of runner extending thread. Make it implement runnable.
Then in your guiclass. you can either to new Thread(inserver).start(); Or take a look at Executorservice or Swingworkers.
Upvotes: 4