1

私のアプレットはほとんどの部分で機能しますが、何かがおかしいのです。ファイル名WORKSを入力する必要があることをユーザーに通知するコード。ユーザーにテキストを入力しなかったことを通知しても機能せず、ファイルへのテキストの書き込みも機能しないためです。

あたかも私のプログラムが途中で壊れたかのようです。誰かがコードを見て、明らかなことを教えてくれることを願っていました。私はそれを6時間見つめていて、もう自分の目を信用していません. アプレットは非常に基本的で簡単です。ユーザーが作業ディレクトリに txt ファイルのファイル名を入力すると、テスト フィールドに入力した内容がファイルに書き込まれます。

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.HeadlessException;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JOptionPane;

public class wwalker2 extends Applet {

    Button write = new Button("WriteToFile");
    Label label1 = new Label("Enter the file name:");
    TextField text = new TextField(20);
    Label label2 = new Label("Write your text:");
    TextArea area = new TextArea(10, 20);

    public void init() {
        add(label1);
        label1.setBackground(Color.orange);
        add(text);
        add(label2);
        label2.setBackground(Color.orange);
        add(area);
        add(write, BorderLayout.CENTER);
        write.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent z) {
                WriteText writeText = new WriteText();
            }
        });
    }

    public class WriteText {

        WriteText() {
            try {
                String str = text.getText();
                if (str.equals("")) {
                    JOptionPane.showMessageDialog(null,
                    "It's not that smart... You have to enter the path and filename");
                    text.requestFocus();
                } else {
                    File f = new File(str);
                    if (f.exists()) {
                        BufferedWriter out = new BufferedWriter(new FileWriter(f, true));
                        if (area.getText().equals("")) {
                            JOptionPane.showMessageDialog(null, "You haven't written anything yet!");
                            area.requestFocus();
                        } else {
                            out.write(area.getText());
                            if (f.canWrite()) {
                                JOptionPane.showMessageDialog(null, "There is now some text in " + str);
                                text.setText("");
                                area.setText("");
                                text.requestFocus();
                            } else {
                                JOptionPane.showMessageDialog(null, "There isn't any text in " + str);
                            }
                            out.close();
                        }
                    } else {
                        JOptionPane.showMessageDialog(null, "Error 404 File not found!");
                        text.setText("");
                        text.requestFocus();
                    }
                }
            } catch (HeadlessException | IOException x) {
            }
        }
    }
}
4

2 に答える 2

1

2つのこと。

1 つ目は、アプレットには非常に厳格なサンド ボックス セキュリティ制限、特にファイルへの書き込み機能がある傾向があることです。

2 つ目は、try-catchブロック内で、何らかのメッセージを表示するか、例外をログに記録する必要があります。

} catch (HeadlessException | IOException x) {
    JOptionPane.showMessageDialog(this, "Failed to write because of " + x.getMessage());
    x.printStackTrace();
}

また、Swing フレームワークを優先して AWT フレームワークを捨てることをお勧めします - 私見

于 2013-06-30T04:00:15.297 に答える
0

テキストはあるが " " のような空のテキストがある場合のシナリオを考えてみると、そうかもしれません。入力文字列をトリムすると、この問題を回避できる場合があります。チェックする場合、これはより安全かもしれません:

if("".equals(str.trim()))
于 2013-06-30T03:56:36.260 に答える