簡體   English   中英

DataInputStream和DataOutputStream,可以正常編譯,但不能按照我想要的方式運行

[英]DataInputStream and DataOutputStream, compiles fine but does not run the way I wanted

我正在開發一個程序,該程序以文本字段和兩個組合框的形式接受用戶輸入,並在下面顯示總計。 我已經完成所有工作,但是現在我試圖保存所選的數字,並在下次打開程序時重新讀取。 導致我相信這是通過datainputstream和dataoutput流完成的。

我已經在程序中都進行了編碼,並且可以正常編譯,但是當我嘗試輸入新數據時,它將捕獲並關閉(我對system.exit進行了編碼,以查看其是否有效)。

我可以用我的語法確定它,但是找不到。

整個程序在這里: http : //pastebin.com/9L686Pxx

編輯:格式化比我想象的要容易得多,因此這是導致程序退出的代碼塊。

try 
    {
            int economyCount = input.readInt();
            int standardCount = input.readInt();
            int advancedCount = input.readInt();
            int exceptionalCount = input.readInt();
            int redCount = input.readInt();
            int greenCount = input.readInt();
            int blueCount = input.readInt();
            int yellowCount = input.readInt();
    } 
    catch(IOException io)
    {
        JOptionPane.showMessageDialog(null, "The program could not read the data. Please check the disk drive and then run the program again.", "Error", JOptionPane.INFORMATION_MESSAGE);

        System.exit(1);
    }

您需要打印或記錄堆棧跟蹤(或至少錯誤消息)以獲取所捕獲的異常。 當前,您的代碼正在丟棄導致問題的原因的證據。 (提示:在Javadoc中查看Exception.printStackTrace() 。)

或者,使用IDE的調試器運行應用程序,然后在System.exit調用上設置一個導致該應用程序退出的斷點。 然后檢查異常以找到其類名和消息。

機會是,這將為您提供足夠的證據,以使您能夠確定和解決根本問題。 如果不是,請將完整的堆棧跟蹤添加到您的問題中。


基於當時發生異常的事實,我懷疑問題是您正在嘗試讀取尚未寫入的數據。 看起來順序是:

  1. 打開output ...會截斷現有文件。
  2. 打開input
  3. 嘗試從input讀取4個值。 哎呀! 那里還沒有...例外。

一旦超過了這一點,您的閱讀和寫作方式就會出現其他問題:

  • 讀或寫代碼似乎都無法將數據流重置為開始。
  • 讀取階段正在寫入4個整數,而寫入階段正在寫入8個整數……以不同的順序。

IMO,嘗試重用相同的DataInputStreamDataOutputStream對象是一個壞主意。 您應該每次在actionPerformed方法中將其重新編碼為“打開,讀取,關閉”,然后每次“打開,寫入,關閉”。 inputoutput變量應該是局部變量,而不是實例變量。

您堆棧跟蹤的最新證據證實了這一診斷。

如果使用的是DataInputStream.readFully() ,則需要分別捕獲EOFException 這意味着您已經用盡了輸入,因此您應該關閉它並停止閱讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM