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 上运行吗?的主要内容,如果未能解决你的问题,请参考以下文章