这是一个非常幼稚的实现。
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;
}
}
}
其他注意事项:
- 为了更快地获得更好的帮助,请发布SSCCE http://sscce.org/。特别是不要包含不必要的图像。
- Use a
JTable
对于这种类型的数据。
- 该代码将文本区域转储到一个选项卡式窗格中,该窗格显然有一个
GridLayout
- BNI
- 没有充分的理由,不要混合使用 Swing 和 AWT 组件。
- 正如已经提到的,使用
SwingWorker
用于获取数据。
Update
..但是控制台的输出没有出现。
嗯。我们想一下
我开发了一个任务管理器Linux in Java
..结合..
Process p1 = Runtime.getRuntime().exec("tasklist.exe");
现在,如果我误解了什么,请纠正我,但是 AFIAULinux 没有 EXE。
我猜代码在 Linux 上失败了,因为err
进程的流被忽略,你没有被告知原因。这是上面显示的代码的屏幕截图,它出现在Windows 7.
现在,如果数据已被硬编码,您可能会看到类似上面的内容。这回答了“(如何)在选项卡式窗口中显示输出”的问题,对吧?
更多信息。于new您所看到的问题是通过实施以下所有建议来解决的当 Runtime.exec() 不会时 http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html。如果您实施了所有建议但仍然无法解决问题,我建议您提出一个新问题。