作业要求:
做一个Ping程序的GUI界面,能够控制ping目的IP地址,请求回显次数,发送字节数大小,生存时间以及每次回复的超时时间(毫秒)
步骤:
本作业采用Java程序语言完成,通过调用cmd窗口执行ping命令并把产生的数据获取,显示GUI界面上
首先需要搭建GUI界面,创建一个JFrame界面,设置大小、出现的位置,布局方式等
JFrame frmPingGui = new JFrame();
frmPingGui.setTitle("Ping GUI");
frmPingGui.setBounds(100, 100, 750, 450);
frmPingGui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmPingGui.getContentPane().setLayout(null);
frmPingGui.setVisible(true);
然后在确定要在主窗口上添加各类面板以及组件
JPanel hostAdress;
JLabel IPLabel1;
JTextField IPAddress;
JCheckBox ResolveIP;
JPanel option;
JLabel TimeoutLabel;
JSpinner Timeout;
JLabel EchoLabel;
JSpinner Echo;
JLabel BufferLabel;
JLabel TTLLabel;
JSpinner Buffer;
JSpinner TTL;
JButton btnPing;
JButton btnStop;
JPanel panel;
JLabel IPLabel2;
JLabel HostLabel;
JLabel ByteLabel;
JLabel TimeLabel;
JLabel TTLLabel2;
JLabel errorLabel;
JScrollPane scrollPane;
JTextArea textArea;
设置面板跟组件的大小位置,布局方式!面板JPanel设置了TitledBorder.border属性,使之具有边框标题的要求,再在frmPingGui上添加面板,组件在相应的面板上添加!
hostAdress = new JPanel();
hostAdress.setBounds(10, 10, 232, 100);
hostAdress.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Host/Address", TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0, 0)));
frmPingGui.getContentPane().add(hostAdress);
ping程序使用了JSpinner 组件,在这里我设置了它们的最小最大值,默认值跟每一跳的值!
例如Timeout的默认值是1000,最小值 100,最大值 3000, 每一跳值100;
Timeout.setModel(new SpinnerNumberModel(1000, 100, 3000, 100));
Echo.setModel(new SpinnerNumberModel(5, 5, 50, 5));
Buffer.setModel(new SpinnerNumberModel(32, 8, 1024, 8));
TTL.setModel(new SpinnerNumberModel(64, 1, 200, 1));
最后完成的GUI界面如图

然后开始调用cmd执行ping命令,如下代码中,cmd包括了
ping IP地址 [-a count] [-l size] [-i TTL] [-w timeout],其中count,size,TTL跟timeout的具体值都是从JSpinner中获取的!
Process p = Runtime.getRuntime().exec(cmd);
br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
把cmd窗口产生的数据获取并通过while循环判断是否为空然后添加到JTextArea文本域上
if(!line.toString().trim().equals(""))
textArea.append(line.toString().trim()+"\n");
最后在ping按钮上设置监听事件,一定button被点击,则把获取的参数整合成一个新得字符串cmd,并用于执行命令!
结论跟心得:
此作业已经可以完成ping的基本要求,能够根据选择相应的参数并执行相应命令,再加以输出到GUI界面上,当按下stop按钮时也会停止输出!不足之处也很明显,由于是调用cmd窗口,数据是一次性读取完成,中途停止只是停止显示,然后相应的一些统计信息也就没有显示出来,另外获取的相应数据也没有分离出来,使之在相应的标签下面,作业还有很大的改进空间!
通过此次作业,了解了Java语言调用命令窗口的方式,也加深了对Java图形化界面的掌握程度!

网友评论