被JDialog卡住了一天

前言:

    目前自己在寫一個動態畫面生成的小模塊,遇到的一個問題!

   

問題描述:

     自己實現JDialog子類,子類里面組合了一些JComponent做用戶輸入,關閉JDialog的時候,一直無法成功獲得用戶輸入的數據!

 

解決歷程:

     剛開始一直是NullPointerException! 然后跟蹤調試,發現沒有值,甚是奇怪!

思維歷程:

     對于swing編程,自己理論上有兩個關注點:1,swing組件樹,swing 組件只會存在于在組件樹中的某一個節點

     2,swing的edt單線程模型,如果阻塞的話,將讓應用程序看起來很卡!由于目前程序比較原始,所以檢查這兩點很

     容易!

          剛開始思考是不是線程引起的問題,比如內存可見性等!這個時候大都是抱著僥幸的心態,像只無頭的蒼蠅一樣亂碰,

    所以結果是不言而喻的!

         后來發現,肯定的是因為自己對swing的JDialog組件模型理解有誤,不正確使用造成的!

        于是采用學習式原型簡化方法,忽略掉所以業務細節,用簡單swing程序模擬出目前的狀況,然后再來尋求問題的答案!

     再解決簡化的問題后,再去解決業務中的問題,就容易了!

問題解決辦法:

      1,對于非模態JDialog,在需要返回結果的情況下,需要采用觀察者模式,來解決問題

      2,對于模態JDialog,可以按照程序流程,讓新建的dialog對象返回

事后總結

     由于對于JDialog的模態,這個概念理解不正確,造成程序編寫異常!在JDialog非模態形態下,用模態的思考方式來解決問  題,所以解決不了問題!

     雖然swing組件的模型很簡單mvc,但是具體概念也要理解清楚,才能解決問題

     成功解決問題的方法也很重要!

   

你可能感兴趣的:(mvc,swing)