Não sou muito bom com threads pois comecei a usar elas a pouco tempo então se puderem ajudar, preciso rodar duas threads uma logo apos acabar a outra mas se eu usar método wait(); acaba dando erro ou rodando apenas a primeira e dando erro;
Aqui o código na do JDialog onde mando rodar as threads.
package CnToDB;
import java.awt.BorderLayout;
public class Importação extends JDialog {
private static final long serialVersionUID = 1L;
private final JPanel contentPanel = new JPanel();
public static JTextArea impressao;
static Calendar c;
static Date fimPes;
static Date fimVei;
static Date Final;
// Launch the application.
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
Importação dialog = new Importação();
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
// Create the dialog.
public Importação() {
addWindowListener(new WindowAdapter() {
@Override
public void windowOpened(WindowEvent arg0) {
try {
// Threads para importação
Thread pessoa = new ImportPessoa();
Thread veiculo = new ImportVeiculo();
c = Calendar.getInstance();
long ini = System.currentTimeMillis();
// dispara a thread
pessoa.start();
// escreve o tempo de execução
long fimPessoa = System.currentTimeMillis();
fimPes = c.getTime();
Functions.escreveTempo(fimPes, ini, fimPessoa, "PARA PESSOA");
synchronized (pessoa) {
try {
pessoa.wait();
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
// dispara a thread
veiculo.start();
// escreve o tempo de execução
long fimVeiculo = System.currentTimeMillis();
fimVei = c.getTime();
Functions.escreveTempo(fimVei, ini, fimVeiculo, "PARA VEICULO");
synchronized (veiculo) {
try {
veiculo.wait();
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
// escreve o tempo de execução total
long fim = System.currentTimeMillis();
Final = c.getTime();
Functions.escreveTempo(Final, ini, fim, "");
synchronized (pessoa) {
pessoa.notify();
}
synchronized (veiculo) {
veiculo.notify();
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
setTitle("Importa\u00E7\u00E3o de Registros");
setResizable(false);
setModal(true);
setBounds(100, 100, 500, 390);
getContentPane().setLayout(new BorderLayout());
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
getContentPane().add(contentPanel, BorderLayout.CENTER);
contentPanel.setLayout(null);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 11, 474, 339);
contentPanel.add(scrollPane);
impressao = new JTextArea();
scrollPane.setViewportView(impressao);
}
}
alguém poderia me ajudar??
Hora q rodo o programa ele da esse erro
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.Util.getInstance(Util.java:381)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:985)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
at com.mysql.jdbc.ConnectionImpl.checkClosed(ConnectionImpl.java:1113)
at com.mysql.jdbc.ConnectionImpl.createStatement(ConnectionImpl.java:2381)
at com.mysql.jdbc.ConnectionImpl.createStatement(ConnectionImpl.java:2363)
at CnToDB.ImportVeiculo.run(ImportVeiculo.java:65)
Ou roda apenas a primeira e da esse erro
java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:503)
at CnToDB.Importação$2.windowOpened(Importação.java:68)
at java.awt.AWTEventMulticaster.windowOpened(Unknown Source)
at java.awt.Window.processWindowEvent(Unknown Source)
at javax.swing.JDialog.processWindowEvent(Unknown Source)
at java.awt.Window.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$300(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.WaitDispatchSupport$2.run(Unknown Source)
at java.awt.WaitDispatchSupport$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.WaitDispatchSupport.enter(Unknown Source)
at java.awt.Dialog.show(Unknown Source)
at java.awt.Component.show(Unknown Source)
at java.awt.Component.setVisible(Unknown Source)
at java.awt.Window.setVisible(Unknown Source)
at java.awt.Dialog.setVisible(Unknown Source)
at CnToDB.Importação$1.run(Importação.java:35)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$300(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Qualquer sugestão é bem vinda.
Só pra constar: vou adicionar mais dessas threads depois e vou precisar que elas executem em sequencia.