前言:
目前自己在寫一個動態畫面生成的小模塊,遇到的一個問題!
問題描述:
自己實現JDialog子類,子類里面組合了一些JComponent做用戶輸入,關閉JDialog的時候,一直無法成功獲得用戶輸入的數據!
解決歷程:
剛開始一直是NullPointerException! 然后跟蹤調試,發現沒有值,甚是奇怪!
思維歷程:
對于swing編程,自己理論上有兩個關注點:1,swing組件樹,swing 組件只會存在于在組件樹中的某一個節點
2,swing的edt單線程模型,如果阻塞的話,將讓應用程序看起來很卡!由于目前程序比較原始,所以檢查這兩點很
容易!
剛開始思考是不是線程引起的問題,比如內存可見性等!這個時候大都是抱著僥幸的心態,像只無頭的蒼蠅一樣亂碰,
所以結果是不言而喻的!
后來發現,肯定的是因為自己對swing的JDialog組件模型理解有誤,不正確使用造成的!
于是采用學習式原型簡化方法,忽略掉所以業務細節,用簡單swing程序模擬出目前的狀況,然后再來尋求問題的答案!
再解決簡化的問題后,再去解決業務中的問題,就容易了!
問題解決辦法:
1,對于非模態JDialog,在需要返回結果的情況下,需要采用觀察者模式,來解決問題
2,對于模態JDialog,可以按照程序流程,讓新建的dialog對象返回
事后總結
由于對于JDialog的模態,這個概念理解不正確,造成程序編寫異常!在JDialog非模態形態下,用模態的思考方式來解決問 題,所以解決不了問題!
雖然swing組件的模型很簡單mvc,但是具體概念也要理解清楚,才能解決問題
成功解決問題的方法也很重要!