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

在guidialog中,我有一个JTextField和一个动作侦听器。这是动作列表:

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.


您应该将blockName从对话框传递给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();
    }
});


旁注:


您不应使用公共字段。使用吸气剂方法。
类应以大写字母开头,并在CamelCase:GuiMain中进行拼写。

09-10 14:36