Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java (家庭作业)对话框窗口出现问题,并在关闭对话框时执行操作_Java - Fatal编程技术网

Java (家庭作业)对话框窗口出现问题,并在关闭对话框时执行操作

Java (家庭作业)对话框窗口出现问题,并在关闭对话框时执行操作,java,Java,我正在做一个家庭作业,它有四个文本字段和一个文本区域,还有一个按钮,将文本字段和文本区域保存到一个文本文件中,每行一个元素。然后,一个对话框将通知用户文件已保存。当对话框关闭时,它应该清空文本字段和文本区域。然而,我对这个项目有一些问题 关于对话框窗口,当我尝试编译时,程序显示以下错误: emailProg.java:81: error: no suitable method found for showMessageDialog(emailProg.sendAction, String) J

我正在做一个家庭作业,它有四个文本字段和一个文本区域,还有一个按钮,将文本字段和文本区域保存到一个文本文件中,每行一个元素。然后,一个对话框将通知用户文件已保存。当对话框关闭时,它应该清空文本字段和文本区域。然而,我对这个项目有一些问题

关于对话框窗口,当我尝试编译时,程序显示以下错误:

emailProg.java:81: error: no suitable method found for showMessageDialog(emailProg.sendAction, String)

JOptionPane.showMessageDialog(this, "Saved");
           ^
其次,我不确定在关闭对话框后如何清空文本字段和文本区域。我知道清空文本字段可以通过使用以下代码来完成:

[textfield].setText("");
但我不确定只有在关闭对话框后才能执行此操作

这是我的密码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class emailProg extends JFrame {
    private JPanel panNorth;
    private JPanel panCenter;
    private JPanel panSouth;

    private JLabel toLabel;
    private JLabel ccLabel;
    private JLabel bccLabel;
    private JLabel subLabel;
    private JLabel msgLabel;

    private JTextField toField;
    private JTextField ccField;
    private JTextField bccField;
    private JTextField subField;
    private JTextArea msgArea;

    private JButton send;

//The Constructor
public emailProg() {
    setTitle("Compose Email");
    setLayout(new BorderLayout());

    panNorth = new JPanel();
    panNorth.setLayout(new GridLayout(4, 2));
    JLabel toLabel = new JLabel("To:");
    panNorth.add(toLabel);
    JTextField toField = new JTextField(15);
    panNorth.add(toField);
    JLabel ccLabel = new JLabel("CC:");
    panNorth.add(ccLabel);
    JTextField ccField = new JTextField(15);
    panNorth.add(ccField);
    JLabel bccLabel = new JLabel("Bcc:");
    panNorth.add(bccLabel);
    JTextField bccField = new JTextField(15);
    panNorth.add(bccField);
    JLabel subLabel = new JLabel("Subject:");
    panNorth.add(subLabel);
    JTextField subField = new JTextField(15);
    panNorth.add(subField);
    add(panNorth, BorderLayout.NORTH);

    panCenter = new JPanel();
    panCenter.setLayout(new GridLayout(2, 1));
    JLabel msgLabel = new JLabel("Message:");
    panCenter.add(msgLabel);
    JTextArea msgArea = new JTextArea(5, 15);
    panCenter.add(msgArea);
    add(panCenter, BorderLayout.CENTER);

    panSouth = new JPanel();
    panSouth.setLayout(new FlowLayout());
    JButton send = new JButton("Send");
    panSouth.add(send);
    add(panSouth, BorderLayout.SOUTH);

    send.addActionListener (new sendAction());
}

private class sendAction implements ActionListener {
    public void actionPerformed (ActionEvent event) {
        try {
            PrintWriter outfile = new PrintWriter("email.txt");
            outfile.print("To: ");
            outfile.println(toField.getText());
            outfile.print("CC: ");
            outfile.println(ccField.getText());
            outfile.print("Bcc: ");
            outfile.println(bccField.getText());
            outfile.print("Subject: ");
            outfile.println(subField.getText());
            outfile.print("Message: ");
            outfile.println(msgArea.getText());

            JOptionPane.showMessageDialog(this, "Saved");
        }
        catch(FileNotFoundException e) {
        System.out.println("File not found.");
        }
    }
}

public static void main(String[] args) {
    emailProg win = new emailProg();
    win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    win.pack();
    win.setVisible(true);
}
}


非常感谢您提供的任何帮助。

指的是非组件,因此它不能用于对话框的父级。

JOptionPane.showMessageDialog(…)
希望组件作为其第一个参数。在您的例子中,您是从一个扩展ActionListener的类调用它的,因此它并不引用组件。可以考虑为这个参数传递null。大概是这样的:

JOptionPane.showMessageDialog(null, "Saved");
JTextField toField = new JTextField(15);
panNorth.add(toField);

也作为旁白,考虑阅读有关。类名称最好以大写字母开头

编辑:如果仔细查看代码,则在构造函数中创建与全局变量同名的局部变量,并将它们添加到面板中。例如,您有一个全局
私有JTextField toField,但在构造函数中,您正在执行以下操作:

JOptionPane.showMessageDialog(null, "Saved");
JTextField toField = new JTextField(15);
panNorth.add(toField);
所以你的全局变量仍然是空的。当您尝试使用此变量在
actionPerformed()
代码中执行任何操作时,都会遇到NullPointerException

这是更新后的代码供您参考。请注意,我已经做了一些更改,特别是对类名进行了更改,并添加了
SwingUtilities.invokeLater(..)
来执行代码。要知道为什么这是必要的,请阅读和


这允许程序编译,但单击“发送”时,对话框窗口不会出现。我还收到了一些错误,例如:emailProg$sendAction.actionPerformed(emailProg.java:71)中线程“AWT-EventQueue-0”java.lang.NullPointerException中的异常。@user1699107:查看第71行中的程序。这与更改showMessageDialog(…)无关。
construct@user1699107:更新了我的答案,以解释出现NullPointerException的原因。希望这有帮助:)我不完全确定这里需要改变什么。我尝试删除在构造函数中重新创建变量的行,但这只会在第32行和第89行出现更多nullpointerexception错误。@user1699107:再次更新我的答案。看一看:)