【问题标题】:Java Formatter append method within anon ActionListener匿名 ActionListener 中的 Java Formatter append 方法
【发布时间】:2013-03-22 09:38:49
【问题描述】:

如果这已经在其他地方得到回答,请提前抱歉,我可能只是搜索错误的标签。

我希望使用实现 ActionListener 的匿名内部类创建一个包含各种变量的日志文件。这将附加到一个 JButton。

使用格式化程序,我在一行中给出了我需要的内容,但我想保留 此事件的所有先前日志(我不在乎它是在最后一个条目之前还是之后)。

在我通过一些浏览本网站和其他网站时发现的各种方法碰壁之后,您可以使用带有 Formatter 的构造函数中的 append 方法来做到这一点。

  • 是否可以在带有 Formatter 的内部类中使用 append?

  • 如果不能,您能否推荐其他仍能满足我需求的 Java 编写器? 我还是个初学者,所以越简单越好……暂时。

  • 如果可以在内部类中使用格式化程序而不需要任何额外的 进口/包,请给​​我们一个提示或链接,我会继续搜索。

我附上了一个小的可编译示例代码,如果有人感兴趣,它可能会有所帮助 有戏。

谢谢, 周末战士84

import java.awt.FlowLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Formatter;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class TestProgram extends JFrame{

private FlowLayout lay;

public TestProgram(){

super("Sample Program");
    lay = new FlowLayout();  
    setLayout(lay);

    final JLabel label1 = new JLabel("Label One");      
    add(label1);           
    final TextField field1 = new TextField(8);      
    add(field1);        
    final JLabel label2 = new JLabel("Exception Label");    
    add(label2);        
    final JButton button1 = new JButton
("Log Data");                           
    add(button1);
    button1.addActionListener(
        new ActionListener(){   
            public void actionPerformed(ActionEvent e){
                if(button1.isSelected());   
                try{
                Formatter fm = new Formatter("C:\\Test\\testlog.txt");                                                              
                fm.format("%s%s%s%s", "Sample Value: ",label1.getText(),
                        "  Sample Value2: ",field1.getText());
                fm.close();
                    }                                                                       
                    catch(Exception ee){                    
                    label2.setText("Make Sure Path exists, C:\\Test\\testlog.txt");                 
                    }
            }
    }
);          
}
}

主要

import javax.swing.JFrame;

public class TestMain{

public static void main  (String[] args){

    TestProgram ts = new TestProgram();

    ts.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    ts.setSize(1200,500);
    ts.setVisible(true);
}   
}

【问题讨论】:

    标签: java append actionlistener inner-classes formatter


    【解决方案1】:

    您是否有特定原因要使用 Formatter 执行此操作?读起来就像您想做一些非常基本的日志记录,Java 中有许多实现可以为您完成繁琐的工作。即使是java.util.logging package 也足以在单击按钮时将日志行附加到文件中。我个人建议logback,但这只是一个偏好。

    如果您坚持自己进行文件操作,this question 的答案可能适合您。在将整行写入文件之前,只需使用 MessageFormat-class 即可完成格式化。

    【讨论】:

    • sheltem,感谢您的回复,我确实在等待时自己想出了一个答案。对 java 和其他作家缺乏经验是我的问题。
    • 我使用格式化程序生成的内容与使用 FileWriters append 方法的字符串变量一样容易传入。今晚我会看一下 logback,在 8 小时的时间段结束后,我会为后代发布我的答案。
    【解决方案2】:

    正如所承诺的,它仍然是一个 WIP,但它解决了我当前的问题。主要是混淆了作者的可能性,以及我需要格式化程序的信念。

    if(button1.isSelected());               
                String path = "C:\\Test\\testlog.txt";
                String mylog = "\r\n"+"Sample Value: " + label1.getText()+"  Sample Value2: "+field1.getText();
                File file = new File(path);
                FileWriter writer;
    
                try {   
                writer = new FileWriter(file,true);             
                BufferedWriter buffer  = new BufferedWriter(writer);
                writer.append(mylog);                              
                buffer.close();
    
                }catch (IOException e1) {                           
                label2.setText("Make Sure Path exists, C:\\Test\\testlog.txt");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多