Domanda

Ho 3 oggetti che si estendono JFrame chiamiamoli FrameA FrameB FrameC.

FrameA è la mia finestra principale dell'applicazione. Dal costruttore di FrameA se l'applicazione non è registrata creo FrameB e FrameC. Sono solo a comparsa del che indicano il periodo di prova.

2 volte su 10 applicazione si blocca e non mostra il telaio B anc C e telaio A non risponde.

Mi chiedevo se v'è un effetto collaterale di creare cornici in questo modo?

È stato utile?

Soluzione

Ecco perché non sta lasciando finitura SeqA è processo di costruzione, si sta interrompendo e poi nello stesso thread che visualizza questi due altri fotogrammi.

Vorrei suggerire di cambiare la vostra strategia e utilizzare un metodo factory e, probabilmente, in combinazione con il metodo SwingUtilities.invokeLater.

Diciamo che avete qualcosa di simile:

 public static void main( String [] args ) {
      JFrame a = new FrameA(); // Has both display logic and trial "pop up" logic
 }

Cambia per:

 public static void main( String [] args ) {
      JKFrame a = FrameA.createFrame(); // the same but splited like the following code 
 }


 class FrameA extends JFrame {
      // new method
      public static JFrame createFrame() {
            return new FrameA();  

      }
 }

Nulla è cambiato appena aggiunto il metodo factory, in seguito è possibile:

         public static JFrame createFrame() {
            if( thatSpecialLogicSaysItIsTrialAndShouldPopUp() ) {
                  JFrame b = new FrameB();
                  b.setVisible( true );
                  JFrame c = new FrameC();
                  c.setVisible( true );
                  return new FrameA();

           } else {
            return new FrameA();
           }  

      }

Che cosa si farà nel secondo codice è separata la logica dal costruttore della classe e lo mise nel metodo factory. In questo modo se thatSpecialLogicSaysItIsTrialAndShouldPopUp restituisce vero, si visualizzano B e C

È anche possibile l'uso descritto un JDialog lì, ma praticamente i problemi saranno passati, quando si separano le responsabilità.

Altri suggerimenti

I sintomi che descrivono suoni come Qualcosa sta bloccando il filo evento - questo può o non può avere nulla a che fare con quanto si sta lanciando i fotogrammi - si vorrà per l'esecuzione in un debugger e quando inizia esibendo i sintomi controllare lo stato del thread evento.

(Anche se Sono d'accordo con tutti gli altri nella discussione che si dovrebbe tirare il telaio lancio logica in qualche altro posto - tuttavia - non c'è niente di "non sicuro" di chiamare costruttori di serramenti da un altro costruttore di telaio - sono diverso da qualsiasi altro costruttore può essere cattiva progettazione -.. ma non dovrebbe bloccare il filo evento)

La vostra intenzione di voler utilizzare un JDialog. Ci fatto per fare questa cosa esatta.

Si dovrebbe pensare la logica. Creazione di nuovi telai in costruttore di un altro frame suona strano. Se farlo nel costruttore - il che significa che il primo fotogramma non è ancora mostrato. Perché non mostrare di inquadrare B e C al di fuori della cornice Un costruttore - logicamente sembra essere lo stesso. Ma poi a seconda delle condizioni è possibile creare costruttiva A e impostare visibile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top