0

これが他の場所で回答されている場合は、事前に申し訳ありません。おそらく間違ったタグを検索しているだけです。

ActionListener を実装する匿名内部クラスを使用して、さまざまな変数のログ ファイルを作成したいと考えています。これは JButton にアタッチされます。

フォーマッターを使用すると、行に必要なものが正確に得られますが、このイベントの以前のログをすべて保持したい (最後のエントリの前か後かは気にしません)。

このサイトや他のサイトをサーフィンして見つけたさまざまな方法で壁にぶつかった後、フォーマッターを使用してコンストラクターの追加メソッドでこれを実行できる可能性があります。

  • Formatter を使用して内部クラスで追加を使用することは可能ですか?

  • そうでない場合は、私のニーズを満たす別の 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);
}   
}
4

2 に答える 2

0

Formatter でこれを行いたい特定の理由はありますか? 非常に基本的なロギングを行いたいように見えますが、Java には汚い作業を行うための多数の実装があります。java.util.logging パッケージでさえ、ボタンのクリック時にログ行をファイルに追加するのに十分です。個人的にはlogbackをお勧めしますが、それは単なる好みです。

自分でファイル操作を行うことに固執する場合は、この質問の回答が役立つ場合があります。完全な行をファイルに書き込む前に、 MessageFormatクラスを使用して書式設定を行うことができます。

于 2013-03-22T12:18:59.940 に答える
0

約束どおり、これはまだ 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");
于 2013-03-22T21:07:21.860 に答える