Estou querendo controlar dispositivos na porta paralela e neste caso pereciso que ele escreva alternadamente em un determinado intervalo de tempo os valor binario na porta paralela.
se eu não colocar o wait() a ele executa os loops todos de uma vez e eu não quero isso quero que ele fique executando os loops quantidade de vezes que eu quero e com este espaço de tempo determinado podemos imaginar uma lâmpada piscando intermitentemente.
segue o código da classe toda
e depois o erro
/*
* Controle.java
*
* Created on 8 de Março de 2007, 20:30
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package servidor;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
import javax.swing.Timer;
import parport.ParallelPort;
/**
*
* @author Cracatio2
*/
public class Controle implements Runnable {
Thread girar = new Thread();
static ParallelPort lpt1 = new ParallelPort(0x378);
static int contPassos;
static int passos;
static Timer t;
static boolean step;
static boolean controle = true;
/**
* Creates a new instance of Controle
*/
public Controle() {
}
public static void motorUm(int dir, int numPassos)
throws InterruptedException {
controle = false;
passos = numPassos;
if (dir == 0){
int contfr = 0;
lpt1.write(0);
contPassos = 0;
step = true;
controle = true;
while (controle){
ActionListener action = new ActionListener() {
int cont = 1;
public void actionPerformed(@SuppressWarnings("unused") java.awt.event.ActionEvent e) {
if(step){
lpt1.write(0);
step = false;
}else{
lpt1.write(1);
step = true;
cont ++;
}
if (passos < cont){
t.stop();
controle = true;
}
}
};
t = new Timer(300, action);
t.restart();
contPassos++;
t.wait();
contfr++;
System.out.println("passo nº: " + contfr);
}
}else if(dir == 1){
int contfr = 0;
lpt1.write(0);
contPassos = 0;
step = true;
controle = true;
while (controle){
ActionListener action = new ActionListener() {
int cont = 1;
public void actionPerformed(@SuppressWarnings("unused") java.awt.event.ActionEvent e) {
if(step){
lpt1.write(2);
step = false;
}else{
lpt1.write(3);
step = true;
cont ++;
}
if (passos < cont){
t.stop();
controle = false;
}
}
};
t = new Timer(300, action);
t.restart();
contPassos++;
t.wait();
contfr++;
System.out.println("passo nº: " + contfr);
}
}else{
JOptionPane.showMessageDialog(null,"Erro ao enviar direção do " +
"motor um", "Erro", JOptionPane.ERROR_MESSAGE);
}
}
public static void motorDois(int dir, int numPassos) {
controle = false;
passos = numPassos;
if (dir == 0){
lpt1.write(0);
contPassos = 0;
step = true;
while (contPassos < numPassos){
ActionListener action = new ActionListener() {
int cont = 1;
public void actionPerformed(@SuppressWarnings("unused") java.awt.event.ActionEvent e) {
if(step){
lpt1.write(0);
step = false;
}else{
lpt1.write(4);
step = true;
cont ++;
}
if (passos < cont){
t.stop();
controle = true;
}
}
};
t = new Timer(300, action);
t.restart();
contPassos++;
try {
t.wait(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}else if(dir == 1){
lpt1.write(0);
contPassos = 0;
step = true;
while (contPassos < numPassos){
ActionListener action = new ActionListener() {
int cont = 1;
public void actionPerformed(@SuppressWarnings("unused") java.awt.event.ActionEvent e) {
if(step){
lpt1.write(8);
step = false;
}else{
lpt1.write(12);
step = true;
cont ++;
}
if (passos < cont){
t.stop();
controle = true;
}
}
};
t = new Timer(300, action);
t.restart();
contPassos++;
try {
t.wait(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}else{
JOptionPane.showMessageDialog(null,"Erro ao enviar direção do " +
"motor um", "Erro", JOptionPane.ERROR_MESSAGE);
}
}
public static void motorTres(int dir, int numPassos) {
controle = false;
passos = numPassos;
if (dir == 0){
lpt1.write(0);
contPassos = 0;
step = true;
while (contPassos < numPassos){
ActionListener action = new ActionListener() {
int cont = 1;
public void actionPerformed(@SuppressWarnings("unused") java.awt.event.ActionEvent e) {
if(step){
lpt1.write(0);
step = false;
}else{
lpt1.write(16);
step = true;
cont ++;
}
if (passos < cont){
t.stop();
controle = true;
}
}
};
t = new Timer(300, action);
t.restart();
contPassos++;
try {
t.wait(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}else if(dir == 1){
lpt1.write(0);
contPassos = 0;
step = true;
while (contPassos < numPassos){
ActionListener action = new ActionListener() {
int cont = 1;
public void actionPerformed(@SuppressWarnings("unused") java.awt.event.ActionEvent e) {
if(step){
lpt1.write(32);
step = false;
}else{
lpt1.write(48);
step = true;
cont ++;
}
if (passos < cont){
t.stop();
controle = true;
}
}
};
t = new Timer(300, action);
t.restart();
contPassos++;
try {
t.wait(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}else{
JOptionPane.showMessageDialog(null,"Erro ao enviar direção do " +
"motor um", "Erro", JOptionPane.ERROR_MESSAGE);
}
}
public static void Garra(int dir, int numPassos){
controle = false;
passos = numPassos;
if (dir == 0){
lpt1.write(0);
contPassos = 0;
step = true;
while (contPassos < numPassos){
ActionListener action = new ActionListener() {
int cont = 1;
public void actionPerformed(@SuppressWarnings("unused") java.awt.event.ActionEvent e) {
if(step){
lpt1.write(0);
step = false;
}else{
lpt1.write(64);
step = true;
cont ++;
}
if (passos < cont){
t.stop();
controle = true;
}
}
};
t = new Timer(300, action);
t.restart();
contPassos++;
try {
t.wait(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}else if(dir == 1){
lpt1.write(0);
contPassos = 0;
step = true;
while (contPassos < numPassos){
ActionListener action = new ActionListener() {
int cont = 1;
public void actionPerformed(@SuppressWarnings("unused") java.awt.event.ActionEvent e) {
if(step){
lpt1.write(128);
step = false;
}else{
lpt1.write(192);
step = true;
cont ++;
}
if (passos < cont){
t.stop();
controle = true;
}
}
};
t = new Timer(300, action);
t.restart();
contPassos++;
try {
t.wait(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}else{
JOptionPane.showMessageDialog(null,"Erro ao enviar direção do " +
"motor um", "Erro", JOptionPane.ERROR_MESSAGE);
}
}
public void run() {
}
}
qui o erro
Exception in thread "main" java.lang.IllegalMonitorStateException: current thread not owner
at java.lang.Object.wait(Native Method)