首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JAVA的进程管理

使用JAVA的进程管理
EN

Stack Overflow用户
提问于 2015-07-10 12:37:21
回答 1查看 809关注 0票数 1

我正在用java开发一个swing应用程序,它显示了我的pc上每个进程的内存使用情况。

结果应该出现在JTable中。

JTable包含4列:

  • 1)进程名称
  • 2) PID
  • 3)会话名称
  • 4)内存使用

JTable看起来像

JTable使用ProcessBuilder类刷新每个句点。

当用户看到这个方法的时候,我觉得这个问题有点慢,很无聊。

我的问题是:

还有其他强大的方法吗?或者我可以在代码中做些什么来增强这个应用程序?

在守则中:

  • "processTable“字段是从调色板(类型为javax.swing.JTable)中拖动的JTable
  • "status“字段也是从调色板(类型为JLabel )中拖动的javax.swing.JLabel。 用于显示所有进程的方法是: @SuppressWarnings(“空-语句”)私有getProcessList()抛出InterruptedException {私有DefaultTableModel表;字符串文件名= System.getProperty("java.io.tmpdir") + "\list.txt",h;//获取%tmp% Scanner sc1 = null;int i,j,k= 0;table = (javax.swing.table.DefaultTableModel) processTable.getModel();processTable.editingStopped(null);table.setRowCount(0);尝试{ ProcessBuilder builder =新ProcessBuilder("cmd.exe“、"/c”、“任务列表> %tmp%\list.txt");builder.redirectErrorStream(真);Process p= builder.start();p.waitFor();try { sc1 =新扫描程序(新文件(文件名));而(sc1.hasNext()) {h= sc1.nextLine();k++;}k=k-5;}System.out.println(“FileNotFoundException ex”){ System.out.println("File“+ filename +”Not“);};status.setText(“进程:”+ k);对象o[] =新Object4;i= 0;尝试{j= 0;sc1 =新文件(文件名);而(sc1.hasNext()) { st =新StringTokenizer(sc1.nextLine(),"\n");i++;if (i > 5) { while (st.hasMoreTokens()) { st1 =新StringTokenizer(st.nextToken(),“");if (st1.hasMoreTokens()) {o= st1.nextToken();} if (st1.hasMoreTokens()) {h= st1.nextToken();if (h.contains(".exe")) {o=o+“”+ h;o1 = st1.nextToken();} o1 = h;}如果(st1.hasMoreTokens()) { o2 = st1.nextToken();} if (st1.hasMoreTokens()) {h= st1.nextToken();} if (st1.hasMoreTokens()) { o3 = st1.nextToken();} if (st1.hasMoreTokens()) {h= st1.nextToken();} table.addRow(o);j++;}{ if (st.hasMoreTokens()) {h= st.nextToken();}} (FileNotFoundException ex) {System.out.println(“文件”+文件名+“未找到”);} System.out.println("UnknownError:“+ex.getMessage();}最后{ if ( Logger.getLogger(ProcessMan.class.getName()).log(Level.SEVERE,!= null) {sc1.lose();} catch (IOException ex) {IOException null,ex);}}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-10 14:15:14

您可以通过以下方法加快速度,而不需要太多的更改:

  • 使用单独的线程轮询正在运行的进程(而不是使用EDT);并将任何更改写入JTable的TableModel。
  • 在调用tasklist时避免使用中间文件,而是将所有输出读入字符串,您将立即解析该字符串。

否则,您可以使用本机:参见https://stackoverflow.com/a/13478716/15472中的一个示例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31340972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档