美文网首页
第五次作业

第五次作业

作者: 小兵12138 | 来源:发表于2017-11-05 15:39 被阅读0次

作业要求:

  做一个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界面如图

Ping GUI.png

  然后开始调用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图形化界面的掌握程度!

ping.gif

相关文章

网友评论

      本文标题:第五次作业

      本文链接:https://www.haomeiwen.com/subject/aeocmxtx.html