zoukankan      html  css  js  c++  java
  • 用Java Swing编写简单的测试小工具界面(源码) 分类: Java 2015-07-30 10:49 23人阅读 评论(0) 收藏

    Author:Pirate Leo

    前段时间我负责在系统中添加了HBase用于管理海量数据,功能实现后自然到了性能测试阶段,性能、可靠性、稳定性,性性都不能少。

    因此就有了个内部的小需求:“给测试部提供一个工具,可以向HBase写入数据,以达到测试所需的数据量”。

    由于我们的系统是由Java编写,Client的代码也用的Hadoop的Java API,因此小工具的界面编写理所应当的选择了Java Swing。

    之前没有用过Swing,本次完全是在网上一边翻博一边编码。

    myBlog: http://blog.csdn.net/pirateleo/

    myEmail: codeevoship@gmail.com

    转载请注明出处,谢谢。

    Begin!

    首先是成品图:


    OK,我知道很丑,咱不就图个实用么……

    这里可以输入Hadoop集群的IP,可以选择需要操作的表,可以清空表中的记录,还有写入耗时统计。

    下面是代码,代码分为两个文件,一个是MainView负责界面展示;另一个是Worker线程,负责干活和刷新进度条与显示数据。

    MainView代码:

    package com.codeevoship.gui;  
      
    import java.awt.Container;  
    import java.awt.Font;  
    import java.awt.GridBagConstraints;  
    import java.awt.GridBagLayout;  
    import java.awt.Insets;  
    import java.awt.event.ActionEvent;  
    import java.awt.event.ActionListener;  
      
    import javax.swing.JButton;  
    import javax.swing.JFrame;  
    import javax.swing.JLabel;  
    import javax.swing.JOptionPane;  
    import javax.swing.JProgressBar;  
    import javax.swing.JRadioButton;  
    import javax.swing.JTextField;  
      
    @SuppressWarnings("serial")  
    public class MainWindow extends JFrame {  
        private JLabel welcomeLbl;  
        private JLabel ipLbl;  
        private JTextField ipTxt;  
        private JLabel numLbl;  
        private JTextField numTxt;  
        private JProgressBar probar;  
        private JTextField txtResultShow;  
      
        private JRadioButton archiveSel;  
        private JRadioButton contentSel;  
        private JRadioButton systemLogSel;  
        private JRadioButton clearDataSel;  
          
        private JButton startBtn;  
        private JButton exitBtn;  
          
        private Thread thdWorker;  
          
        public MainWindow() {  
            // 获取本JFrame的ContentPane  
            Container contentPane = getContentPane();  
              
            GridBagLayout gridbag = new GridBagLayout();  
            contentPane.setLayout(gridbag);  
            GridBagConstraints c = new GridBagConstraints();  
              
            // Title  
            welcomeLbl = new JLabel("CodeEvoShip HBase 数据填充工具");  
            welcomeLbl.setFont(new Font("Serif",Font.BOLD,20));  
            c = getGridBagConstraints(0, 0, 0, 1, 0, 0,  
                    GridBagConstraints.CENTER, GridBagConstraints.NONE,   
                    new Insets(10, 0, 0, 0), 10, 0);  
            gridbag.setConstraints(welcomeLbl, c);  
            contentPane.add(welcomeLbl);  
              
            // IP  
            ipLbl = new JLabel("Cluster IP:");  
            c = getGridBagConstraints(0, 1, 1, 1, 0, 0,  
                    GridBagConstraints.WEST, GridBagConstraints.NONE,   
                    new Insets(10, 0, 10, 0), 10, 0);  
            gridbag.setConstraints(ipLbl, c);  
            contentPane.add(ipLbl);  
                  
            ipTxt = new JTextField("127.0.0.1;127.0.0.2;127.0.0.3");      
            c = getGridBagConstraints(1, 1, 0, 1, 0, 0,  
                    GridBagConstraints.WEST, GridBagConstraints.NONE,   
                    new Insets(10, 0, 10, 0), 85, 0);  
            gridbag.setConstraints(ipTxt, c);  
            contentPane.add(ipTxt);  
              
            // 数量填写  
            numLbl = new JLabel("Write Number:");  
            c = getGridBagConstraints(0, 2, 1, 1, 0, 0,  
                    GridBagConstraints.WEST, GridBagConstraints.NONE,   
                    new Insets(10, 0, 10, 0), 10, 0);  
            gridbag.setConstraints(numLbl, c);  
            contentPane.add(numLbl);  
                      
            numTxt = new JTextField("10000");  
            c = getGridBagConstraints(1, 2, 0, 1, 0, 0,  
                    GridBagConstraints.WEST, GridBagConstraints.NONE,   
                    new Insets(10, 0, 10, 0), 230, 0);  
            gridbag.setConstraints(numTxt, c);  
            contentPane.add(numTxt);  
              
            // 多选框  
            archiveSel = new JRadioButton("Archive Table");       
            c = getGridBagConstraints(0, 3, 1, 1, 0, 0,  
                    GridBagConstraints.WEST, GridBagConstraints.NONE,   
                    new Insets(0, 0, 0, 0), 0, 0);  
            gridbag.setConstraints(archiveSel, c);  
            contentPane.add(archiveSel);  
              
            contentSel = new JRadioButton("Content Table");       
            c = getGridBagConstraints(1, 3, 1, 1, 0, 0,  
                    GridBagConstraints.WEST, GridBagConstraints.NONE,   
                    new Insets(0, 0, 0, 0), 0, 0);  
            gridbag.setConstraints(contentSel, c);  
            contentPane.add(contentSel);  
              
            systemLogSel = new JRadioButton("SystemLog Table");       
            c = getGridBagConstraints(2, 3, 1, 1, 0, 0,  
                    GridBagConstraints.WEST, GridBagConstraints.NONE,   
                    new Insets(0, 0, 5, 0), 0, 0);  
            gridbag.setConstraints(systemLogSel, c);  
            contentPane.add(systemLogSel);  
              
            clearDataSel = new JRadioButton("Clear old data of selected Tables!!");       
            c = getGridBagConstraints(0, 4, 0, 1, 0, 0,  
                    GridBagConstraints.WEST, GridBagConstraints.NONE,   
                    new Insets(0, 0, 15, 0), 0, 0);  
            gridbag.setConstraints(clearDataSel, c);  
            contentPane.add(clearDataSel);  
              
            // 进度条  
            probar = new JProgressBar(0, 100);  
            probar.setStringPainted(true);  
            c = getGridBagConstraints(0, 6, 0, 1, 0, 0,  
                    GridBagConstraints.WEST, GridBagConstraints.NONE,   
                    new Insets(5, 5, 5, 5), 250, 0);  
            gridbag.setConstraints(probar, c);  
            contentPane.add(probar);  
              
            txtResultShow = new JTextField("Not Begin");  
            txtResultShow.setEditable(false);  
            txtResultShow.setHorizontalAlignment(JTextField.CENTER);  
            c = getGridBagConstraints(0, 7, 0, 1, 0, 0,  
                    GridBagConstraints.WEST, GridBagConstraints.NONE,   
                    new Insets(0, 0, 5, 0), 325, 0);  
            gridbag.setConstraints(txtResultShow, c);  
            contentPane.add(txtResultShow);  
      
            //执行与退出  
            startBtn = new JButton("Start");  
            c = getGridBagConstraints(0, 5, 0, 1, 0, 0,  
                    GridBagConstraints.WEST, GridBagConstraints.NONE,   
                    new Insets(0, 0, 5, 0), 50, 0);  
            gridbag.setConstraints(startBtn, c);  
            startBtn.addActionListener(new ActionListener() {  
                public void actionPerformed(ActionEvent arg0) {  
                    if (!paraPassCheck()) {  
                        return;   
                    }  
                      
                    if (null != thdWorker && thdWorker.isAlive()) {  
                        JOptionPane.showMessageDialog(null,"There already is a task running now, please wait");  
                        return;  
                    }  
                    DoWork doWork = new DoWork(ipTxt.getText(),Long.parseLong(numTxt.getText()),  
                            contentSel.isSelected(),archiveSel.isSelected(),  
                            systemLogSel.isSelected(),clearDataSel.isSelected(),  
                            probar, txtResultShow);  
                    thdWorker = new Thread(doWork);  
                    thdWorker.start();  
                }  
            });  
            contentPane.add(startBtn);  
              
            exitBtn = new JButton("Exit");  
            c = getGridBagConstraints(1, 5, 0, 1, 0, 0,  
                    GridBagConstraints.EAST, GridBagConstraints.NONE,   
                    new Insets(0, 0, 5, 0), 50, 0);  
            gridbag.setConstraints(exitBtn, c);  
            exitBtn.addActionListener(new ActionListener() {  
                public void actionPerformed(ActionEvent arg0) {  
                    System.exit(0);  
                }  
            });  
            contentPane.add(exitBtn);  
        }  
          
        private boolean paraPassCheck() {  
            try {  
                Long.parseLong(numTxt.getText());  
                return true;  
            } catch (Exception e) {  
                JOptionPane.showMessageDialog(null,"Invalid number ");  
                return false;  
            }  
        }  
          
        private static GridBagConstraints getGridBagConstraints(int gridx,  
                int gridy, int gridwidth, int gridheight, double weightx,  
                double weighty, int anchor, int fill, Insets insets, int ipadx,  
                int ipady) {  
      
            return new GridBagConstraints(gridx, gridy, gridwidth, gridheight,  
                    weightx, weighty, anchor, fill, insets, ipadx, ipady);  
        }  
          
        public static void main(String args[]) {  
            MainWindow mainWindow = new MainWindow();  
            mainWindow.setTitle("CodeEvoShip");  
            mainWindow.pack();  
            mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
            mainWindow.setVisible(true);  
        }  
      
    }  
    Worker代码:
    package com.codeevoship.gui;  
      
    import javax.swing.JProgressBar;  
    import javax.swing.JTextField;  
      
    public class DoWork implements Runnable {  
      
        JProgressBar probar;  
        JTextField curTxtShow;  
        long totalNum = 0;  
        long curNum = 0;  
        long startTime = 0;  
        long curTime = 0;  
      
        public DoWork(String ip, long num, boolean isWriteCon, boolean isWriteArc, boolean isWriteSys, boolean isClearData, JProgressBar probar, JTextField curTxtShow) {  
            System.out.println("IP:" + ip + ", Num:" + num);  
            System.out.println("Write Content[" + isWriteCon + "], Write Archive[" + isWriteArc + "], Write SystemLog[" + isWriteSys + "].");  
            startTime = 0;  
            curNum = 0;  
            totalNum = num;  
            this.probar = probar;  
            this.curTxtShow = curTxtShow;  
        }  
          
        @Override  
        public void run() {  
            startTime = System.currentTimeMillis();  
            // 开始工作  
            System.out.println("Do Work Start!");  
            StringBuilder sb = new StringBuilder();  
            while (true) {  
                if (curNum >= totalNum) {  
                    break;  
                }  
      
                try {  
                    // TODO: Real work here  
                    Thread.sleep(10);  
                      
                    // 更新界面显示  
                    curNum += 1;  
                    probar.setValue((int) (curNum*100/totalNum));  
                    curTime = System.currentTimeMillis();  
                    sb.setLength(0);  
                    sb.append(curNum);  
                    sb.append('/');  
                    sb.append(totalNum);  
                    sb.append(" cost time: ");  
                    sb.append((curTime - startTime)/1000);  
                    sb.append('s');  
                    curTxtShow.setText(sb.toString());  
                      
                } catch (Exception e) {  
                    e.printStackTrace();  
                }  
            }  
            System.out.println("Do Work End!");  
        }  
    }  
    大家如需要可随意使用,改成自己的小工具,只要把Worker中的// TODO: 改为实际运行的程序即可。

  • 相关阅读:
    fastjson
    抽象类和接口
    Linux发行版,分类,CentOS下载
    《Head First 设计模式》读后总结:基础,原则,模式
    java.lang.NoSuchMethodError
    在word中优雅地插入代码
    Java读取Maven工程下的配置文件,工具类
    移动互联网10年,传奇一直在发生
    Spring整合MybatisPlus学习笔记
    IDEA环境下SSM整合------注解开发
  • 原文地址:https://www.cnblogs.com/xieping/p/4714154.html
Copyright © 2011-2022 走看看