Pagina 1 di 1

Java Thread Join

MessaggioInviato: 19 gen 2017, 17:53
da faberebaf
Salute a tutti.
Sto realizzando una piccola applicazione con Java che mi da modo di imparare il linguaggio.
Ho incontrato un problema che non riesco a risolvere.
Ad un certo punto del programma principale, mi serve aprire una finestra dove poter immettere
dei parametri che condizionano il resto dell’elaborazione.
La funzione “join” , da quanto ho capito, blocca l’esecuzione del programma che ha fatto partire il thread fino a che questo non ha terminato la propria esecuzione.
La cosa funziona se quella del thread è un’elaborazione batch, se invece è interattiva il thread si conclude con la visualizzazione del frame.
Questo è il codice :
Codice: Seleziona tutto
public class Trmain
{
   public static void main(String[] args)
   {
      Tr tr = new Tr();
      Thread t1 = new Thread(tr);
      t1.start();
      try {
         t1.join();
      } catch (InterruptedException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
         System.out.println("errore");
      }
      System.out.println("continua programma");
   }
}


Codice: Seleziona tutto
public class Tr  implements Runnable
{
   @Override
   public void run()
   {
      Oggetto v2 = new Oggetto();
   }
}


Codice: Seleziona tutto
public class Oggetto extends JFrame
{
   private JTextField textField;
   public Oggetto()
   {
      setTitle("Oggetto");
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setBounds(1, 1, 450, 300);
      textField = new JTextField();
      getContentPane().add(textField, BorderLayout.NORTH);
      textField.setColumns(10);
      JButton btnPigia = new JButton("pigia");
      btnPigia.addMouseListener(new MouseAdapter() {
         @Override
         public void mouseClicked(MouseEvent arg0) {
            System.out.println("fatto");
         }
      });
      getContentPane().add(btnPigia, BorderLayout.CENTER);
      JLabel lbl = new JLabel();
      setVisible(true);
   }
}


In pratica il main dovrebbe proseguire solo dopo che è stato premuto “btnPigia” avendo a quel punto a disposizione il valore di “txtField”.
La classe Oggetto sarà istanziata anche da altre classi dell’applicazione.

Non so se sia il modo corretto per risolvere il problema, quindi qualsiasi suggerimento sarà
prezioso.

Grazie.

Re: Java Thread Join

MessaggioInviato: 20 gen 2017, 23:39
da faberebaf
La soluzione è :
Codice: Seleziona tutto
public class ProvaJD extends JDialog

JDialog al posto di JFrame.
JDialog ha alcune limitazioni rispetto a JFrame ma risolve il problema.

Spero che possa essere utile a qualche principiante come me.

Re: Java Thread Join

MessaggioInviato: 21 gen 2017, 0:05
da cicciob90
Scusa se te lo chiedo, ma sei principiante nel linguaggio, o principiante nella programmazione?

Re: Java Thread Join

MessaggioInviato: 21 gen 2017, 10:44
da faberebaf
Principiante di OOP e di Java.

Re: Java Thread Join

MessaggioInviato: 31 gen 2017, 0:34
da marioursino
Credo tu debba avviare il JDialog con la proprietà modal.

Vedi qui.

Re: Java Thread Join

MessaggioInviato: 2 mar 2017, 23:45
da faberebaf
Grazie Foto Utentemarioursino.
Scusa il ritardo :oops:
In effetti non poteva essere utile la soluzione senza l'istruzione
Codice: Seleziona tutto
setModal(true);