Java JTextField变量在actionlistener之外返回null?

Java JTextField变量在actionlistener之外返回null?,java,class,variables,jtextfield,Java,Class,Variables,Jtextfield,我正在制作一个添加和格式化文件的程序。实际上我有很多类,但是为了这个问题,让我们假设我有两个类,guidialog和guimain 在guidialog中,我有一个JTextField和一个actionlistener。以下是actionlistner: public void actionPerformed(ActionEvent event) { blockName=textFieldBlockName.getText(); System.ou

我正在制作一个添加和格式化文件的程序。实际上我有很多类,但是为了这个问题,让我们假设我有两个类,guidialog和guimain

在guidialog中,我有一个JTextField和一个actionlistener。以下是actionlistner:

public void actionPerformed(ActionEvent event) {
            blockName=textFieldBlockName.getText();
            System.out.println("Made new block: "+blockName);
            canClose=true;

            guimain blockAddWrite = new guimain();
            blockAddWrite.addNewBlockFile();
        }
    });

public String blockName;
现在在guimain中,我有一个格式化程序,它根据文本字段中给定的名称编写文件:

   public void addNewBlockFile() {
      blockdialog blockName = new blockdialog();

      try {
         newBlock = new Formatter("Block" + blockName.blockName + ".java");
         System.out.println("Created File: Block" + blockName.blockName);
      } catch (Exception e) {
         System.out.println("ERROR: Could Not Output Block File");
      }
   }

我确实编辑并关闭了文件,但这不是必需的。但当我尝试这一点时,guimain中所有将blockName输出称为“null”的内容。我想不出来

这是因为在guimain中,您没有使用用户输入内容的对话框的blockName字段:您使用的是另一个新构造的对话框的blockName字段:

public void addNewBlockFile() {
    blockdialog blockName = new blockdialog();
    ^--- the dialog is not the one where the user entered something. It's a new one.
您应该将块名从对话框传递到guimain:

public void actionPerformed(ActionEvent event) {
        blockName=textFieldBlockName.getText();
        System.out.println("Made new block: "+blockName);
        canClose=true;

        guimain blockAddWrite = new guimain(blockName); // we construct a guimain instance with the entered text
        blockAddWrite.addNewBlockFile();
    }
});
旁注:

  • 您不应该使用公共字段。使用getter方法
  • 类应该以大写字母开头,并用CamelCase:GuiMain拼写

从约定的角度来看,类的命名应该像FooBar,而不是FooBar。是否调用过
actionPerformed(ActionEvent)
方法?此行是否显示对话框并等待其关闭<代码>blockdialog blockName=新建blockdialog()请编辑问题,解释按顺序发生的事情以及您希望发生的事情。