为什么 UDP 服务器的 Javafx GUI 停止工作
Why Javafx GUI for UDP Server stops working
我已经创建了一个 UDP 服务器,它总是监听从客户端获取数据。单独的服务器 - 没有 GUI - 工作正常并且可以完成所有需要的工作。我使用 javafx 为它制作了一个简单的 GUI,以便当用户按下按钮时,服务器开始工作并跟踪接收到的数据包。但是当我点击开始按钮时,GUI 停止工作。我做错了什么?
GUI
@FXML
//buttons
public Button start_btn;
//text boxes to enter values
public TextField sentPackets;
@FXML
private void start_btnClicked() throws IOException, InterruptedException, SQLException {
Server obj = new Server();
obj.main(null);
}
服务器
public static void main(String[] args) throws IOException, SQLException {
System.out.println("-------------------Server Listening-------------------");
String line;
// Step 1 : Create a socket to listen at port 1234
DatagramSocket ds = new DatagramSocket(1234);
byte[] receive = new byte[65535];
DatagramPacket DpReceive = null;
while (true) {
// Step 2 : create a DatgramPacket to receive the data.
DpReceive = new DatagramPacket(receive, receive.length);
// Step 3 : revieve the data in byte buffer.
ds.receive(DpReceive);
System.out.println("Client:-" + data(receive));
line = data(receive).toString();
String str = line;
String[] arrOfStr = str.split("@", 100);
db obj = new db();
obj.DB(arrOfStr);
// Clear the buffer after every message.
receive = new byte[65535];
}
}
// A utility method to convert the byte array
// data into a string representation.
public static StringBuilder data(byte[] a)
{
if (a == null)
return null;
StringBuilder ret = new StringBuilder();
int i = 0;
while (a[i] != 0)
{
ret.append((char) a[i]);
i++;
}
return ret;
}
您的主要方法位于 while (true) 循环中,因此 start_btnClicked 方法永远不会 returns。
为什么不让您的服务器 class 实现 Runnable,而不是调用 main。然后,当单击该按钮时,您可以实例化一个服务器并启动它,这将 return 允许启动方法 return
我已经创建了一个 UDP 服务器,它总是监听从客户端获取数据。单独的服务器 - 没有 GUI - 工作正常并且可以完成所有需要的工作。我使用 javafx 为它制作了一个简单的 GUI,以便当用户按下按钮时,服务器开始工作并跟踪接收到的数据包。但是当我点击开始按钮时,GUI 停止工作。我做错了什么?
GUI
@FXML
//buttons
public Button start_btn;
//text boxes to enter values
public TextField sentPackets;
@FXML
private void start_btnClicked() throws IOException, InterruptedException, SQLException {
Server obj = new Server();
obj.main(null);
}
服务器
public static void main(String[] args) throws IOException, SQLException {
System.out.println("-------------------Server Listening-------------------");
String line;
// Step 1 : Create a socket to listen at port 1234
DatagramSocket ds = new DatagramSocket(1234);
byte[] receive = new byte[65535];
DatagramPacket DpReceive = null;
while (true) {
// Step 2 : create a DatgramPacket to receive the data.
DpReceive = new DatagramPacket(receive, receive.length);
// Step 3 : revieve the data in byte buffer.
ds.receive(DpReceive);
System.out.println("Client:-" + data(receive));
line = data(receive).toString();
String str = line;
String[] arrOfStr = str.split("@", 100);
db obj = new db();
obj.DB(arrOfStr);
// Clear the buffer after every message.
receive = new byte[65535];
}
}
// A utility method to convert the byte array
// data into a string representation.
public static StringBuilder data(byte[] a)
{
if (a == null)
return null;
StringBuilder ret = new StringBuilder();
int i = 0;
while (a[i] != 0)
{
ret.append((char) a[i]);
i++;
}
return ret;
}
您的主要方法位于 while (true) 循环中,因此 start_btnClicked 方法永远不会 returns。
为什么不让您的服务器 class 实现 Runnable,而不是调用 main。然后,当单击该按钮时,您可以实例化一个服务器并启动它,这将 return 允许启动方法 return