Я хочу создать серверное и клиентское приложение в java с JFrame
. Сервер должен всегда прислушиваться к клиенту, поэтому я сделал некоторое время l oop.
У меня есть кнопка запуска в коде фрейма, и когда я нажимаю на нее, сервер запускается с l oop, а затем фрейм не отвечает после нажатия кнопки, поэтому я не могу закрыть окно. Для этого мне пришлось открыть диспетчер задач.
Вот код сервера Java:
import java.net.*;
import java.io.*;
public class Host
{
public static String line = "";
private Socket socket = null;
private ServerSocket server = null;
private DataInputStream in = null;
public Host(int port)
{
try
{
server = new ServerSocket(port);
System.out.println("Server started");
System.out.println("Waiting for a client ...");
socket = server.accept();
System.out.println("Client accepted");
in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
while (!line.equals("/Disconnect client"))
{
if (Actions.start == true) {
try
{
line = in.readUTF();
System.out.println(line);
if(Actions.alert == true) {
System.out.println(Actions.alertText);
}
if (Actions.prepare == true) {
System.exit(0);
}
if (line == "/clients") {
System.out.println(Actions.clientlist);
}
}
catch(IOException i)
{
System.out.println(i);
}
}
}
System.out.println("Closing connection");
socket.close();
in.close();
}
catch(IOException i)
{
System.out.println(i);
}
}
}
А вот код кадра:
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JTextField;
public class GUI {
public static JFrame frame;
public static JTextField textField;
/**
* Launch the application.
*/
public static void main(String[] args) {
//Host.loop();
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GUI window = new GUI();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public GUI() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
if (Actions.prepare == true) {
System.exit(0);
}
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JButton btnNewButton = new JButton("STOP");
btnNewButton.setBounds(10, 11, 89, 23);
frame.getContentPane().add(btnNewButton);
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Actions.onEnd();
}
});
textField = new JTextField();
textField.setEditable(false);
textField.setBounds(10, 45, 414, 205);
frame.getContentPane().add(textField);
textField.setColumns(10);
JButton btnNewButton_1 = new JButton("ALERT");
btnNewButton_1.setBounds(109, 11, 89, 23);
frame.getContentPane().add(btnNewButton_1);
JButton btnNewButton_2 = new JButton("START");
btnNewButton_2.setBounds(208, 11, 89, 23);
frame.getContentPane().add(btnNewButton_2);
btnNewButton_2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Actions.onStart();
}
});
}
}
Класс действий:
public class Actions {
public static boolean start = false;
public static boolean prepare = false;
public static boolean alert = false;
public static String[] clientlist;
public static String alertText;
public static boolean recieved = false;
public static void onStart() {
start = true;
Host server = new Host(5000);
}
public static void onEnd() {
prepare = true;
if (Actions.prepare == true) {
System.exit(0);
}
}
public static void onAlert() {
alert = true;
}
}