• 第七天


    今天,我完成了结束进程的功能,并且可以实现每隔一段时间来更新进程表格。并且如果在表格鼠标左键之后,完成结束进程之后才能继续更新。

    package wl;
    
    import java.awt.BorderLayout;
    import java.awt.Choice;
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Font;
    import java.awt.Frame;
    import java.awt.MenuBar;
    import java.awt.MenuItem;
    import java.awt.event.MouseEvent;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JPopupMenu;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.JToolBar;
    import javax.swing.border.Border;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableModel;
    
    public class ProcessApp extends JFrame {
        static JFrame f = new JFrame("Process");
        static JPopupMenu m_popupMenu;// 弹出式菜单、右键菜单
        static JPanel panel = new JPanel();
        static Object[][] cellData = { { "名称", "PID", "优先级", "状态", "用户名", "cpu", "内存", "描述" } };
        static String[] columnNames = { "col1", "col2", "col3", "col4", "col5", "col6", "col7", "col8" };
        static JTable table = new JTable(cellData, columnNames);
        static int focusedRowIndex=-1;//table mouse row number
        static List<processModel> processs=new ArrayList<processModel>();
        static boolean isUpdate=true;//是否更新:当鼠标左键按下后不再更新进程,当过去5秒后继续更新
        
        private  static ProcessApp p=new ProcessApp();
        
    
    
        ProcessApp() {// init frame
            f.setVisible(true);
            f.setSize(1000, 800);
            f.setLayout(new BorderLayout());
    
        }
    
        void initMenu() {// init menu
            JMenuBar menubar = new JMenuBar();
            JMenu[] menus = new JMenu[] { new JMenu("文件"), new JMenu("选项"), new JMenu("查看") };
            for (int i = 0; i < menus.length; i++) {
                menubar.add(menus[i]);
            }
            f.setJMenuBar(menubar);
        }
    
        void initToolBar() {
            JToolBar toolbar = new JToolBar();
            JButton[] buttons = new JButton[] { new JButton("应用"), new JButton("进程"), new JButton("性能"), new JButton("联网"),
                    new JButton("用户"), new JButton("性能") };
            for (int i = 0; i < buttons.length; i++) {
                toolbar.add(buttons[i]);
                buttons[i].setFont(f.getFont().deriveFont(Font.PLAIN, 18f));
    
            }
            toolbar.setBackground(Color.white);
            f.getContentPane().add(toolbar, BorderLayout.NORTH);
        }
    
        void initPanel() {
    
            panel.setBackground(Color.WHITE);
            f.getContentPane().add(panel, BorderLayout.CENTER);
        }
    
        void initTable() {
            // (1)名称,优先级,cpu,内存,磁盘,网络,GPU的使用情况,端口,用户名,状态,描述
    
            table.setSize((int) (panel.getWidth() * 0.2), 40);
            table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
            String[] headers = { "名称", "PID", "优先级", "状态", "用户名", "cpu", "内存", "描述" };
            DefaultTableModel model = new DefaultTableModel(cellData, headers) {
                public boolean isCellEditable(int row, int column) {
                    return false;
                }
            };
            table = new JTable(model);
            panel.add(table);
    
            createPopupMenu();// 创建鼠标点击事件
    
        }
    
        void setTable() {
            System.out.println("setTable");
    
            TableModel tableModel = table.getModel();
             int rows = table.getRowCount();//get table rows
             System.out.println(rows);
             while(rows>1) {//if update not update finish,continue delete rows
                   ((DefaultTableModel) tableModel).removeRow(0);// rowIndex是要删除的行序号
                   rows = table.getRowCount();//get table rows
            }
                
    
            // "名称","PID","优先级","状态","用户名","cpu","内存","描述"
            processs = process.Getprocess();
            int i=0;
            for (processModel p : processs) {
                String[] arr = new String[8];
                arr[0] = p.getName();
                arr[1] = p.getPID();
                arr[2] = p.getPrio();
                arr[3] = p.getState();
                arr[4] = p.getUser();
                arr[5] = Double.toString(p.getB_cpu());
                arr[6] = Double.toString(p.getB_memory());
                //arr[7] = p.getDescribe();
                arr[7]=String.valueOf(i);
                i++;
                //System.out.println(arr[0]+"    "+arr[7]);
                // 添加数据到表格
                ((DefaultTableModel) tableModel).addRow(arr);
                
    
            }
            // 更新表格
            table.invalidate();
            table.setSize(panel.getWidth() - 20, panel.getHeight());
    
            // JTable对象添加点击事件
            table.addMouseListener(new java.awt.event.MouseAdapter() {
    
                public void mouseClicked(java.awt.event.MouseEvent evt) {
                    isUpdate=false;
                    jTable1MouseClicked(evt);
    
                }
    
            });
            
            
    
        }
    
        // 设置滚动条
        void setScrollPane() {
            JScrollPane jsp;
            jsp = new JScrollPane(table);
            panel.add(jsp);
        }
    
    //table点击事件
    
        private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {
    
            mouseRightButtonClick(evt);
    
        }
    
    //鼠标右键点击事件
    
        private void mouseRightButtonClick(java.awt.event.MouseEvent evt) {
    
            // 判断是否为鼠标的BUTTON3按钮,BUTTON3为鼠标右键
    
            if (evt.getButton() == java.awt.event.MouseEvent.BUTTON3) {
    
                // 通过点击位置找到点击为表格中的行
    
                focusedRowIndex = table.rowAtPoint(evt.getPoint());
                
    
                if (focusedRowIndex == -1) {
    
                    System.out.println(focusedRowIndex);
    
                }
    
                // 将表格所选项设为当前右键点击的行
    
                table.setRowSelectionInterval(focusedRowIndex, focusedRowIndex);
    
                // 弹出菜单
    
                m_popupMenu.show(table, evt.getX(), evt.getY());
                
    
            }
    
        }
    
        public void mousePressed(MouseEvent e) {
            if (e.getButton() == MouseEvent.BUTTON3) {
                int selIndex = table.rowAtPoint(e.getPoint());
                System.out.println(selIndex);
            }
        }
    
    //创建鼠标点击事件
        private static void createPopupMenu() {
    
            m_popupMenu = new JPopupMenu();
    
            JMenuItem[] MenuItem = new JMenuItem[7];
            for (int i = 0; i < MenuItem.length; i++) {
                MenuItem[i] = new JMenuItem();
            }
            MenuItem[0].setText("  结束进程  ");
            MenuItem[1].setText("  结束进程树  ");
            MenuItem[2].setText("  设置优先级  ");
            JMenu menu = new JMenu("  资源值  ");
            JMenuItem m1 = new JMenuItem();
            JMenuItem m2 = new JMenuItem();
            m1.setText("");
            m2.setText("百分比");
            menu.add(m1);
            menu.add(m2);
            
            MenuItem[3].setText("  创建转储文件  ");
            MenuItem[4].setText("  打开文件所在位置  ");
            MenuItem[5].setText("  属性  ");
    m_popupMenu.add(MenuItem[0]);
    m_popupMenu.add(MenuItem[1]);
    m_popupMenu.add(MenuItem[2]);
    m_popupMenu.add(MenuItem[3]);
    m_popupMenu.add(MenuItem[4]);
    m_popupMenu.add(MenuItem[5]);
    m_popupMenu.add(MenuItem[6]);
            m_popupMenu.add(menu);
              
                MenuItem[0].addActionListener(new java.awt.event.ActionListener() {
                    
                    public void actionPerformed(java.awt.event.ActionEvent evt) {
    
                        // 该操作需要做的事
                        String pid=processs.get(focusedRowIndex-1).getPID();
                        process.Killprocess(pid);
                        p.setTable();
                        isUpdate=true;//操作完成,继续更新
    
                    }
    
                });
    
                
            m1.addActionListener(new java.awt.event.ActionListener() {
    
                public void actionPerformed(java.awt.event.ActionEvent evt) {
    
                    // 该操作需要做的事
    
                    System.out.println("该操作需要做的事");
    
                }
    
            });
            m2.addActionListener(new java.awt.event.ActionListener() {
    
                public void actionPerformed(java.awt.event.ActionEvent evt) {
    
                    // 该操作需要做的事
    
                    System.out.println("该操作需要做的事");
    
                }
    
            });
    
        }
    
        public static void main(String[] args) {
        
            p.initMenu();
            p.initToolBar();
            p.initPanel();
            p.initTable();
        
            p.setTable();
            p.setScrollPane();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Boolean result = false;
            int count = 0;
            while(!result) {
                try {
                    Thread.sleep(5000); //设置暂停的时间 5 秒
                    if(isUpdate==true) {
                    count ++ ;
                    p.setTable();
                    System.out.println(sdf.format(new Date()) + "--循环执行第" + count + "");
                    /*if (count == 3) {
                        result = true;
                        break ;
                    }*/
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }  
            }
    
    
            System.out.println("finish");
        }
    }
    processApp
    package wl;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Properties;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class process {
        //kill -9 [PID]
    public static void  Killprocess(String pid) {
            
            Runtime runtime = Runtime.getRuntime();
            List<String> tasklist = new ArrayList<String>();
            java.lang.Process process = null;
            try {
                /*
                 * 
                 * 自适应执行查询进程列表命令
                 * 
                 */
                Properties prop = System.getProperties();
                // 获取操作系统名称
                boolean is=false;
                String os = prop.getProperty("os.name");
                if (os != null && os.toLowerCase().indexOf("linux") > -1) {
                    // 1.适应与linux
    
                    BufferedReader reader = null;
                    // 显示所有进程
                    //"名称","PID","优先级","状态","用户名","cpu","内存","磁盘","网络","描述"
                    process = Runtime.getRuntime().exec("kill -9 "+pid);
                    System.out.println("kill process");
                    
    
                }
    
            } catch (Exception e) {
    
                e.printStackTrace();
    
            }
    
            
    
        }
    
        
        
        //get process infomation
        public static List<processModel> Getprocess() {
            
            Runtime runtime = Runtime.getRuntime();
            List<String> tasklist = new ArrayList<String>();
            java.lang.Process process = null;
            List<processModel> processs=new ArrayList<processModel>();
            int count = 0; // 统计进程数
            try {
                /*
                 * 
                 * 自适应执行查询进程列表命令
                 * 
                 */
                Properties prop = System.getProperties();
                // 获取操作系统名称
                boolean is=false;
                String os = prop.getProperty("os.name");
                if (os != null && os.toLowerCase().indexOf("linux") > -1) {
                    // 1.适应与linux
    
                    BufferedReader reader = null;
                    // 显示所有进程
                    //"名称","PID","优先级","状态","用户名","cpu","内存","磁盘","网络","描述"
                    process = Runtime.getRuntime().exec("top -b -n 1");
                    reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    
                    String line = null;
    
                    while ((line = reader.readLine()) != null) {
                        if(line.startsWith("   PID")) {
                            is=true;
                            line=reader.readLine();
                        }
                        if(is==true) {
                            
                            Pattern p = Pattern.compile("\s+");
                            Matcher m = p.matcher(line);
                            line= m.replaceAll(",");
                            
                    
                        String[] strs=line.split(",");
                       
                        processModel pro=new processModel();
                        pro.setPID(strs[1]);
                        pro.setUser(strs[2]);
                        pro.setPrio(strs[3]);
                        pro.setMemory(Double.valueOf(strs[4]));
                        pro.setState(strs[8]);
                        pro.setB_cpu(Double.valueOf(strs[9]));
                        pro.setB_memory(Double.valueOf(strs[10]));
                        pro.setName(strs[12]);
                        //gSystem.out.println(pro.toString());
                        processs.add(pro);
                        }
                    }
    
                }
    
            } catch (Exception e) {
    
                e.printStackTrace();
    
            }
             System.out.println(processs.get(0).toString());
            return processs;
    
        }
    
        
        public static void main(String[] args) throws Exception {
            //System.out.println(Getprocess());;
            Killprocess("1239");
            //installTool("iotop");
        }
    }
    processApp
  • 相关阅读:
    机器学习知识总结---5、生成对抗网络的难点是什么
    博弈论---11、博弈论总结
    博弈论---10、零和博弈、正和博弈
    SSH Protocol
    log4net MaxSizeRollBackups
    Initializing a static field vs. returning a value in static property get?
    NLog Internal Logging
    NLog WriteToTargets method
    NLog rolling file
    Custom date and time format strings
  • 原文地址:https://www.cnblogs.com/wl2017/p/10874040.html
Copyright © 2020-2023  润新知