2014-02-23 123 views
0

我在java中做了一个简单的JFrame。但是我也想在打开真正的.jar文件的同时打开开发者控制台。第8行是我要在控制台窗口中输出的文本,该文本应该从JFrame开始。Java控制台独立?

代码:

import javax.swing.JFrame; 

public class Launcher extends JFrame { 
    private static final long serialVersionUID = 1L; 

    public static void main(String[] args) { 
     new Launcher().setVisible(true); 
     System.out.println("Started Launcher..."); 
    } 
    private Launcher() { 
     super("DevCity13 - Launcher (Alpha)"); 
     setSize(600, 600); 
     setResizable(false); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 
} 

回答

4

你总是可以显示自己的控制台,其输出的任何写入到System.out的内容:

enter image description here

import java.awt.Color; 
import java.awt.Font; 
import java.io.IOException; 
import java.io.OutputStream; 
import java.io.PrintStream; 

import javax.swing.JFrame; 
import javax.swing.JTextArea; 
import javax.swing.SwingUtilities; 

public class Launcher extends JFrame { 
    private static final long serialVersionUID = 1L; 

    private static class Console { 
     private final JFrame frame; 

     public Console() { 
      frame = new JFrame(); 
      final JTextArea textArea = new JTextArea(24, 80); 
      textArea.setBackground(Color.BLACK); 
      textArea.setForeground(Color.LIGHT_GRAY); 
      textArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12)); 
      System.setOut(new PrintStream(new OutputStream() { 

       @Override 
       public void write(int b) throws IOException { 
        textArea.append(String.valueOf((char) b)); 
       } 
      })); 
      frame.add(textArea); 
     } 

     public void init() { 
      frame.pack(); 
      frame.setVisible(true); 
     } 

     public JFrame getFrame() { 
      return frame; 
     } 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       Console console = new Console(); 
       console.init(); 
       Launcher launcher = new Launcher(); 
       launcher.setVisible(true); 
       console.getFrame().setLocation(
         launcher.getX() + launcher.getWidth() 
           + launcher.getInsets().right, launcher.getY()); 
       System.out.println("Started Launcher..."); 
      } 
     }); 
    } 

    private Launcher() { 
     super("DevCity13 - Launcher (Alpha)"); 
     setSize(600, 600); 
     setResizable(false); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 
} 
+0

是的,这是有点准确!我唯一想知道的是,如果有一种方法可以给控制台一个标题,如果你知道的话?感谢代码人btw! :) –

+0

@valrossen_Oliver只需在控制台的框架上调用'setTitle(“Some title”)''。 –

0

你只需要在运行一个.jar启用Java控制台。为此,请按照官方文档here上的步骤操作。它可能会根据您的操作系统而有所变化,但这是主意。

+0

这是不太我所需要的东西,你看......我希望打开.Jar文件的最终用户可以获得一个控制台(如Windows cmd),并在其中打印第8行的文本...... IS有办法吗? –

+1

如果你不愿意实现你自己的控制台,我没有看到另一种方式。您可以使用“JTextField”创建另一个“JFrame”并显示控制台消息。在这种情况下,您必须将'System.out'更改为其他内容,以便将这些消息存储并显示在新的'JFrame'上。 – Trein