该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这半个月在弄SNMP协议的通信,要通过udp收发数据包,用javafx做图形界面。把图形界面和后台逻辑代码写好之后,在前后端对接时发现了这样一个问题,我将发送udp的方法设置为一个按钮的事件时,暂定发送udp数据包的方法为test2,点击按钮进入到test2之后,并没有发送udp数据包,通过抓包软件看到确实没有发出去。抓包软件用了wireshark。
1、我用main和@test作为程序的入口去调用test2,都能正常发数据包,但是将方法A作为一个按钮的事件就不能发包了
2、我又写了一个发tcp的方法B,通过按钮去调用方法B,tcp能够发送
3、我怀疑是jfxrt.jar包版本低,更新了jre1.8.0.241,还是出现这问题。下了jdk13,从jdk中生成的jre功能不全是怎么回事,绝大多数的包都没有,最后只能够单独下载能够下载的最新版本jre
4、我又尝试了java的其他图形界面,awt和swing还是同样问题
以下是代码
@Test
public void test2()
{
try
{
DatagramSocket socket = new DatagramSocket(1234);
byte[] data2 = new byte[] {0x00,0x00,0x00,0x00,0x00};
DatagramPacket packet2 = new DatagramPacket(data2, data2.length, InetAddress.getByName("192.168.1.76"), 161);
socket.send(packet2);
socket.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
就是一个最简单的发送udp数据包的方法
button1.setOnAction(new EventHandler()
{
@Override
public void handle(ActionEvent event)
{
if(textField1.getText().equals("") || textField2.getText().equals(""))
{
return;
}
// String operation = comboBox1.getSelectionModel().getSelectedItem();
// List myMibs = controller.Run(textField1.getText(), "public", textField2.getText(), operation);
// ObservableList data = FXCollections.observableArrayList(myMibs);
// table1.getItems().clear();
// table1.setItems(data);
controller.test2();
}
});
这是javafx的按钮调用test2的代码(注释的内容与本文无关)
public static void main(String[] args)
{
SNMPController controller = new SNMPController();
controller.test2();
JFrame frame = new JFrame();
frame.setVisible(true);
frame.setSize(200,200);
JPanel panel = new JPanel();
frame.add(panel);
JButton button = new JButton("单击我");
panel.add(button);
button.addMouseListener(new MouseListener()
{
@Override
public void mouseClicked(MouseEvent arg0)
{
SNMPController controller = new SNMPController();
controller.test2();
} @Override
public void mouseEntered(MouseEvent arg0)
{
// TODO Auto-generated method stub
} @Override
public void mouseExited(MouseEvent arg0)
{
// TODO Auto-generated method stub
} @Override
public void mousePressed(MouseEvent arg0)
{
// TODO Auto-generated method stub
} @Override
public void mouseReleased(MouseEvent arg0)
{
// TODO Auto-generated method stub
}
});
这是swing调用test2的代码,调用了两次,一次是在加载界面就调用一次,另一个是作为按钮的事件,就是在按钮外面哪次调用成功发了数据包,作为事件的那次调用没有发。
是不是java UI的io问题啊,应该怎么解决,请教各位大佬。