TaskManager for linux - Java Swing 可以在 Linux 上运行吗?

Posted

技术标签:

【中文标题】TaskManager for linux - Java Swing 可以在 Linux 上运行吗?【英文标题】:TaskManager for linux - Does Java Swing work on Linux? 【发布时间】:2012-05-31 07:11:19 【问题描述】:

我要为 Linux 开发一个任务管理器,目前处于初始阶段。首先,我在 Windows 平台的 Java Eclipse 中实现了它,它工作得很好。它不适用于 Linux 平台。我使用了 Java/Swing 的组合。

“tasklist.exe”在 Windows 中完美运行。 linux中的“ps-aux”不起作用。

代码:

package test.t100.t001;

import java.awt.*;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;

import javax.swing.*;

public class TabbedPaneDemo extends JPanel 

    private static final long serialVersionUID = 1L;
    Integer i;

    JTextArea output = new JTextArea();

    public static void main(String args[]) 
    
        SwingUtilities.invokeLater(new Runnable() 
            public void run()
            
                JFrame frame = new JFrame("TabbedPaneDemo");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TabbedPaneDemo(), BorderLayout.CENTER);
                frame.pack();
                frame.setVisible(true);
            
        );
    

    private String getDetails() throws IOException 
        //fn();
        String line;
        String result = "";
        PrintStream p;
        Process p1 = Runtime.getRuntime().exec("tasklist.exe");
        // read from a process
        BufferedReader input = new BufferedReader(
                new InputStreamReader(p1.getInputStream()));
        while ((line = input.readLine()) != null)
        
            //System.out.println(line);
            output.append(line + "\n");
            result += line+"\n";
            //p.println (line);
            //textarea.setVisible(true);    
        
        //msgBox(result);
        //p.close();
        input.close();   

        return result;
    

    public TabbedPaneDemo() 
        super(new GridLayout(1, 1));

        JTabbedPane tabbedPane = new JTabbedPane();
        ImageIcon icon = createImageIcon("images");


        JComponent panel1 = makeTextPanel("tasklist");
        tabbedPane.addTab("tasks", icon, panel1,
                "ta");
        // add it to something!
        panel1.add(new JScrollPane(output));
        tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);

        JComponent panel2 = makeTextPanel("windows");
        tabbedPane.addTab("wins", icon, panel2,
                "wi");
        tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);


        add(tabbedPane);//`enter code here`
        tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);

        try 
            String s = getDetails();
            output.setText(s);
         catch(IOException e) 
            e.printStackTrace();
        
    


    public static void msgBox(String msg) 
        javax.swing.JOptionPane.showConfirmDialog((java.awt.Component)
                null, msg, "WindowsUtils",
                javax.swing.JOptionPane.DEFAULT_OPTION);
    


    protected JComponent makeTextPanel(String text)
    
        JPanel panel = new JPanel(false);
        JLabel filler = new JLabel(text);
        filler.setHorizontalAlignment(JLabel.CENTER);
        panel.setLayout(new GridLayout(1, 1));
        panel.add(filler);
        return panel;
    

    protected static ImageIcon createImageIcon(String path) 
        java.net.URL imgURL = TabbedPaneDemo.class.getResource(path);
        if (imgURL != null) 
            return new ImageIcon(imgURL);
         else 
            System.err.println("Couldn't find file: " + path);
            return null;
        
    

【问题讨论】:

在您的last question 的 cmets 中,我建议您从命令行 1 执行此操作,并实施“当 Runtime.exec() 不会”的建议。您是否有适用于 Linux 的版本在命令行上?您当前的代码 still 并不表示您了解使用进程的危险.. :( 【参考方案1】:

我假设Java Swings 是指Java Swing。 Java 是跨平台的,因此除非您使用一些外部库(具有特定于平台的调用),否则您应该能够在任何平台上编译和运行。

话虽如此,根据this 之前的 SO 帖子,ps -ef 将使您运行所有任务,因此您似乎使用了错误的调用。

我假设您尝试在其上执行此代码的 Linux 平台具有某种 GUI,并且不是基于控制台的发行版之一。

【讨论】:

+1 用于解决 OP“实际上”提出的问题,而不是文本中包含的唯一问题。非常直观。 :) @Thompson:Thnx .. 它也在 Ubuntu 中工作。我发现了错误并实施了你所说的......!【参考方案2】:

由于您似乎忽略了我的建议,即整理 Process 的创建方式和输出 streams 消耗,我将尝试不同的策略。

Java Swing 可以在 Linux 上运行吗?

是的,确实如此。这是你的证明(每个都有完整的来源)。

    Set Location by Platform Example Nested Layout Example

【讨论】:

以上是关于TaskManager for linux - Java Swing 可以在 Linux 上运行吗?的主要内容,如果未能解决你的问题,请参考以下文章

linux的for循环的写法

java调用linux终端命令,如何使终端不直接退出

有关于linux下的一个小C程序代码,打印9*9乘法表

flinkflink作业超额启动多个taskManager k8s

从 Windows 8 TaskManager 隐藏进程

Flink TaskManager OutOfMemoryError: Metaspace 处理记录