Dae galera!! Eu fiz duas classes, uma com uma interface e outra que é uma thread, essa mostra a cada 5 segundos a minha interface e se ela já estiver visível, ela fica esperando para abrir outra!! O problema é esse, quando eu verifico se ela está visível e do um wait(), tá dando a seguinte mensagem de erro:
Exception in thread "Thread-2" java.lang.IllegalMonitorStateException: current thread not owner
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Unknown Source)
at haltso.sinco.model.Mensagem.run(Mensagem.java:23)
Os fontes são esses:
Interface gráfica:
package view;
import model.Mensagem;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class JMensagem extends JFrame {
private static final long serialVersionUID = 1L;
private Container c;
public JMensagem() {
init();
}
private void init() {
c = this.getContentPane();
this.setSize( new Dimension( 135, 200 ));
this.setTitle( "Mensagens instantâneas" );
this.setResizable( false );
this.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent e ) {
dispose();
}
});
this.setLocation( 1135, 770 );
c.add(makePanelPrincipal());
}
private JPanel makePanelPrincipal() {
JPanel pnlPrincipal = null;
if( pnlPrincipal == null ) {
pnlPrincipal = new JPanel( new BorderLayout());
JTextArea txaMensagem = new JTextArea();
txaMensagem.setText( " - My name is Bond!!!" );
JScrollPane scroll = new JScrollPane();
scroll.setViewportView( txaMensagem );
pnlPrincipal.add( scroll );
}
return pnlPrincipal;
}
public static void main(String[] args) {
JMensagem msn = new JMensagem();
Mensagem msnT = new Mensagem(msn);
msnT.start();
}
}
E a Thread:
package model;
import javax.swing.JFrame;
public class Mensagem extends Thread {
private JFrame frm;
public Mensagem( JFrame frm ) {
this.frm = frm;
}
public void run() {
while( true ) {
try {
Mensagem.sleep( 5000 );
frm.setVisible( true );
while( frm.isVisible()) {
this.wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Valeu!!!