1

希望する名前のテキストファイルを作成するのに問題があります。

「username」Subjectsという名前のテキストファイルを作成したいと思います。

 private void saveSubjects(){

    RegisterFrame r = new RegisterFrame();


    String username = r.txtUser.getText();;

    try{
        FileWriter f = new FileWriter(username + "" + "Subjects" + ".txt", true);

        String subjects[] = lstSubjects.getItems();

        for(int i = 0; i<subjects.length; i++){
            f.write(subjects[i] + "\r\n");
        }
        f.close();
        JOptionPane.showMessageDialog(null, "Data saved!", "Data Saved", JOptionPane.INFORMATION_MESSAGE);
    }catch(Exception e){
        JOptionPane.showMessageDialog(null, "Nothing Inputted!", "Error", JOptionPane.ERROR_MESSAGE);
    }

}

RegisterFrameに入力されているユーザー名を取得したいのですが、機能していません。私はそれが単純なことであることを知っていますが、私はまだこれの初心者です。どうすればこれを解決できますか?

前もって感謝します

4

3 に答える 3

2

これを試して:

String username = r.txtUser.getText();
System.out.println("The loaded username is: " + username);

次に、問題がどこにあるかがわかります。ファイルへの書き込みまたはユーザー名テキストの取得です。

問題がテキストの取得にある場合は、別の取得方法を検討するか、ファイル書き込み部分を削除してユーザー名取得部分を指定して質問を変更します。

それ以外の場合は、エラーが発生した IDK。

ところで:どうやってうまくいかないのですか?ファイルはまったく作成されていませんか?エラーはありますか?ファイルの名前が間違っていますか?ご指定ください

于 2012-09-12T15:17:00.560 に答える
0

new RegisterFrame()GUI ウィンドウが起動すると仮定すると、問題は、名前を入力する前にコードが実行されることです。代わりに、イベント リスナーを使用してテキスト フィールドの内容を取得する必要があります。そうしないと、名前を取得するコードがウィンドウが開いた直後に実行され、何かを入力する前に実行されます。

タイムラインは次のようになります。

  1. RegisterFrame は新しいスレッドを開始して、コードをブロックすることなく GUI を表示します
  2. あなたのコードは、もちろん空である txtUser から "" をすぐに引き出します
  3. 、あなたはあなたの名前を入力します
  4. コード内の何もそのアクションに注意を払っていないため、何も起こりません

代わりに、次のようにする必要があります。

  1. RegisterFrame は新しいスレッドを開始して、コードをブロックすることなく GUI を表示します
  2. メソッドが戻る、または GUI に依存しない作業を開始する
  3. 、あなたはあなたの名前を入力します
  4. 新しいスレッドからイベント リスナーがトリガーされ、名前を取得してファイルに書き込むための関連付けられたアクションが実行されます。

たとえば、ユーザーがボタン (「送信」または「ファイルの書き込み」など) をクリックするまで待機し、そのボタンにActionListenerを登録するなど、ユースケースに適したリスナーの種類を決定する必要があります。次に、ユーザー名のポーリングとファイル書き込み動作をそのアクションに入れます*。これで完璧です!

*実際には、ActionListeners で可能な限り実行したくないことを追加する必要があります。ユーザー名が空でないかどうかを確認してから、実際の作業を別のスレッド (たとえばSwingWorkerを使用) に渡す方がよいでしょう。あなたの目的は、それについて心配しなくても大丈夫だと思います。

于 2012-09-12T15:34:04.857 に答える
0

ファイルを書き込むためのコードは問題ないようです。あなたのコードに基づいて、私はこれを試しましたが、これは完全に機能しました:

public static void main(String[] args) {

    FileWriter f = null;
    try {
        f = new FileWriter("Subjects.txt", true);

        String subjects[] = {"subject1", "subject2"};

        for (String subject : subjects) {
            f.write(subject + "\r\n");
        }

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        IOUtils.closeQuietly(f);
    }
}

あなたの問題は他の場所にあると思います。

ベスト プラクティスでは、などの Closeable オブジェクトをFileWriterfinally ブロックで閉じる必要があることに注意してください。

于 2012-09-12T15:25:42.310 に答える