- 作業系統為 Window XP 。
- 只使用一個 JFileChooser 來開啟檔案選擇視窗。
- 使用 CrossPlatformLookAndFeel 的 look-and-feel 。
- 至少有一個 FileFilter 用在 JFileChooser 裡面。
- 這個 FileFilter 會有條件地接受某些檔案。
- 預設 JFileChooser 所開啟的目錄底下有該 FileFilter 所接受的檔案。
- 在 showOpenDialog() 之後呼叫了 resetChoosableFileFilters()。
其實這個問題很早就發現了,只是前幾天才實際去測試發生的條件,也有回報給 Sun 並且被接受為 Bug 6857569 。
要避免這個問題也蠻簡單的,只要讓其中一個條件不成立就可以了。例如:
- 使用 Linux 。
- 每次都用新的 JFileChooser 來開啟檔案選擇視窗。
- 使用系統預設的 look-and-feel 。
- 不要在目錄底下擺 FileFilter 會接受的檔案。
- 把 showOpenDialog() 移到 resetChoosableFileFilters() 之前。
作為一個使用者,大概只有 1 跟 4 這兩個作法可以選擇。還好我是 GOAL 的 programmer ,可以直接套用上面的第五個方法。雖然改了之後真的沒有再讓程式當掉,但卻也不保證檔案選擇視窗開了成千上萬次之後會不會發生,畢竟每次用都不會開超過 10 次吧。