按下按钮,将System.out.println重定向到AWT组件

时间:2014-10-29 14:33:41

标签: java

我有以下代码,想要将System.out.println(result);打印到我的画面,但我不知道如何。我试过了txtField.setText(result),但这没效果。

我只想向{Form>

显示System.out.println(result);
 Public static void main(String...args) throws IOException {

            String line = null;
            Pattern category = Pattern.compile("^\\[(.*?)\\]$"); // matches [Cars]
            Pattern itemAndQuantity = Pattern.compile("^(\\w+)=(\\d+)$"); // matches Lamborghini=6
            StringBuilder result = new StringBuilder();
            try (BufferedReader br = new BufferedReader(new FileReader("D:/test.txt"))) {
                while ((line = br.readLine()) != null) {
                    Matcher categoryMatcher = category.matcher(line);
                    Matcher itemMatcher = itemAndQuantity.matcher(line);
                    if (categoryMatcher.matches()) {
                        if (result.length() > 0) { // found new category, put on new line
                            result.append(System.getProperty("line.separator"));
                        }
                        String categoryName = categoryMatcher.group(1); // Cars
                        result.append(categoryName).append(": "); // Cars: 
                    } else if (itemMatcher.matches()) {
                        String item = itemMatcher.group(1); // Lamborghini
                        String quantity = itemMatcher.group(2); // 6
                        result.append(item).append(" ") // Lamborghini
                              .append(quantity) // Lamborghini 6
                              .append(", "); // Lamborghini 6,
                    }
                }


                // we are done processing the file, output the result
                System.out.println(result);
            }

2 个答案:

答案 0 :(得分:1)

编辑编辑:

以下答案是在我缺乏经验的时候写的,仅留给上下文。忽略它并仅考虑此编辑编辑中提供的信息。

你所拥有的是一个StringBuilder对象,其中包含你想要容器的文本。执行System.out.println(result)后,它很可能会调用result上的StringBuilder#toString方法,该方法从StringBuilder中提取此文本。调用txtField.setText()很可能不会执行此隐式转换,这就是它似乎不起作用的原因。

您要做的是调用txtField.setText(result.toString())来获取StringBuilder中包含的文本,并将文本字段的文本设置为该文本。

请参阅:


编辑:

使用以下内容替换System.out.println:

JFrame frame = new JFrame();
JTextField text;
text = new JTextField(result.toString());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(text, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
frame.setLocationRelativeTo(null);

首先,我不知道你是否已经导入了所有必要的软件包,如果你没有这很可能是你的第一个错误。

public static void main(String...args)

public static void main(String...args)

此外,我建议您在尝试创建try语句后添加以下代码:

catch(Exception e){
    System.out.println("An exception occurred");
}

您可以添加任何内容而不是System.out.println(“发生异常”),但这是我能想到的最简单的通知您发生错误。

答案 1 :(得分:1)

根据您迄今为止提供给我们的信息,有几个问题:

Public static void main(String...args) throws IOException {

这里的P应该是小写的。你也应该包装可能会在try-catch语句中抛出IOException的代码,而不是使用throws IOException;这是一个很好的编码实践,因为可能发生的IOException将无法处理......

try (BufferedReader br = new BufferedReader(new FileReader("D:/test.txt"))) {

您在catch ...

结束时错过了try声明
txtField.settext(result)

它应该是txtField.setText(result.toString())。请注意,T大写,toString()返回String中存储的StringBuilder