Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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/7/user-interface/2.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_User Interface - Fatal编程技术网

Java 关闭窗口时写入文件

Java 关闭窗口时写入文件,java,user-interface,Java,User Interface,我正在写一个餐馆节目。 当用户确认订单时,订单将存储在order类型的数组中为什么?因为当用户选择关闭程序时,所有订单都会保存在一个文件中,其中包含项目名称和每个项目的信息。 此外,每个订单对象都有一个类型为item的数组 你能帮我写那个文件吗? 我知道它将出现在processWindowEvent方法中 这是我的尝试,我知道我应该删除textArea.getText(),但我也不知道如何打印所有项目 protected void processWindowEvent(WindowEvent

我正在写一个餐馆节目。 当用户确认订单时,订单将存储在order类型的数组中为什么?因为当用户选择关闭程序时,所有订单都会保存在一个文件中,其中包含项目名称和每个项目的信息。 此外,每个订单对象都有一个类型为item的数组

你能帮我写那个文件吗? 我知道它将出现在processWindowEvent方法中

这是我的尝试,我知道我应该删除textArea.getText(),但我也不知道如何打印所有项目

  protected void processWindowEvent(WindowEvent e){

         if (e.getID() == WindowEvent.WINDOW_CLOSING) {
            JOptionPane.showMessageDialog(this,"All operation have been saved ");

            try{
               outFile=new File("Orderslist.txt");
               out=new FileOutputStream(outFile);
               ob=new PrintWriter(out);}
               catch(IOException M){M.getMessage(); }
            for(int i=0;i<o2.length;i++){
               if(o2[i]!=null){
                  if(o2[i].getCount()<=4)
                     ob.println(o2[i].toString()+"\n--------------\n"+textArea.getText()+"--------------\n"+"\nTotal: "+o2[i].getTotalPrice());

                  else if(o2[i].getCount()>4)
                     ob.println(o2[i].toString()+"\n--------------\n"+textArea.getText()+"--------------\n"+"\nTotal Price#: "+o2[i].getTotalPrice()+"\n\nDiscount 20%\n\n--------------\nTotal price#: "+(o2[i].getTotalPrice()-(o2[i].getTotalPrice()*0.2)));

               }
            }
受保护的void processWindowEvent(WindowEvent e){
如果(e.getID()==WindowEvent.WINDOW\u关闭){
showMessageDialog(这是“所有操作都已保存”);
试一试{
outFile=新文件(“Orderslist.txt”);
out=新文件输出流(输出文件);
ob=新的打印写入程序(输出);}
catch(IOM异常){M.getMessage();}

对于Widnow的构造函数中的(int i=0;i),请添加以下内容:

public Window() {
    this.addWindowListener(new WindowAdapter(){
        @Override
        public void windowClosing(WindowEvent arg0) {
            writeFile(textArea.getText()); //Call your method
            System.exit(0);
        }
    });
    ...
}
要写入文件,请执行以下操作:

File file = new File("myFile.txt");
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);

bw.write("Texto to write");
bw.close();
ob.println()
do
ob.close();
ob.flush();
之后


如果不关闭流或刷新流,文件中将不会打印任何内容。

这确实不是最好的设计,您应该在更改后立即写入文件。原因是如果应用程序因任何其他原因(断电、任务管理器死机、崩溃等)而关闭这样,您就不想丢失用户的数据。自动备份该文件(例如,启动后复制该文件)也是值得的,因此,如果您以某种方式损坏了当前会话,您可以恢复


要真正实现保存,您需要使用某种类型的FileOutputStream,但具体实现将根据您希望流中数据的格式有很大不同。例如XML、JSON、计划文本、二进制序列化等都相当简单,但您需要选择一种:)

closing方法没有问题,问题是写入的文本文件是空的。您所说的“我的窗口”的构造是什么意思?Java基础知识:您有一个表示窗口/JFrame/Frame/etc的类(类MyWindow扩展了JFrame)。每个类都有一个构造函数。