我已经为Java开发了一个Linux任务管理器。现在的输出显示在控制台中,而选项卡式窗口则单独出现(这是使用Java Swing完成的)。 现在我希望控制台的输出显示在选项卡窗口中。
我该怎么办?
我使用过类。一个用于任务管理器功能,另一个用于GUI。我已粘贴在编码之下。
**TabbedPaneDemo1.java**
package components;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.Writer;
import java.util.Iterator;
import java.util.List;
/*
* TabbedPaneDemo.java requires one additional file:
* images/middle.gif.
*/
import javax.swing.JTabbedPane;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JComponent;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.TextArea;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
public class TabbedPaneDemo1
{
public static void main(String args[]) throws Exception
{
try
{
TextArea textarea = new TextArea();
TabbedPaneDemo obj = new TabbedPaneDemo();
obj.fn();
String line;
String result = "";
FileOutputStream out;
//FileOutputStream out; // declare a file output object
PrintStream p;
Process p1 = Runtime.getRuntime().exec("tasklist.exe");
out = new FileOutputStream("myfile.txt");//write to a file//
p = new PrintStream( out );
BufferedReader input = new BufferedReader(new InputStreamReader(p1.getInputStream()));//read form a file//
while ((line = input.readLine()) != null)
{
System.out.println(line);
//textarea.append(line + "\n");
result += line+"\n";
p.println (line);
//textarea.setVisible(true);
}
//msgBox(result);
p.close();
input.close();
}
catch(Exception e)
{
}
}
public static void msgBox(String msg) {
javax.swing.JOptionPane.showConfirmDialog((java.awt.Component)
null, msg, "WindowsUtils",
javax.swing.JOptionPane.DEFAULT_OPTION);
}
}
**TabbedPaneDemo.java**
package components;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.JTabbedPane;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JComponent;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.JTextField;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
public class TabbedPaneDemo extends JPanel {
Integer i;
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");
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);
}
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;
}
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("TabbedPaneDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TabbedPaneDemo(), BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
public static void fn() {
SwingUtilities.invokeLater(new Runnable() {
public void run()
{
UIManager.put("swing.boldMetal", Boolean.FALSE);
createAndShowGUI();
}
});
}
}
答案 0 :(得分:3)
这是一个非常天真的实现。
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;
}
}
}
JTable
。GridLayout
- BNI SwingWorker
获取数据。..但是控制台的输出没有出现。
嗯。让我们考虑一下
我已经为Java
中的 Linux 开发了一个任务管理器
..结合......
Process p1 = Runtime.getRuntime().exec("tasklist.exe");
现在,如果我误解了某些内容,请纠正我,但AFIAU Linux没有EXE。
我猜测代码在Linux上失败了,并且因为忽略了进程的err
流,所以你没有被告知原因。以下是上面显示的代码的屏幕截图,它显示在 Windows 7上。
现在,如果数据是硬编码的,您可能会看到类似上面的内容。这回答了所谓的“(如何)在选项卡窗口中显示输出”的问题,对吧?
更多信息。通过实施When Runtime.exec() won't的所有建议,您将看到新问题。如果你实施所有的建议和仍然无法解决问题,我建议你问一个新问题。
答案 1 :(得分:2)
仅分
TextArea textarea = new TextArea();
为什么AWT组件
使用Swing JTextArea textarea = new JTextArea();
您可以直接从
将数据加载到JTextArea
FileOutputStream
的Process p1 = Runtime.getRuntime()
或从File
JTextArea.read(File)
接受"\n"
或来自FileReader
或FileXxxx
e.i。
JTextArea.append(String)
您遇到Concurency in Swing问题,您必须致电/重定向
Process p1 = Runtime.getRuntime()
和
FileIO
到后台任务,有
Runnable#Thread
调用(输出到JTextArea
应该包含在invokeLater
)或
SwingWorker
(来自process
或publish
的输出可以在Event Dispatch Thread
上完成)