tenho duas classes cada uma com uma thread o codigo está abaixo das duas gostaria de saber pq elas não funcionam quando chamo o método que tem por função dá inicio a thread esse método de inicio é chamado no método decide que implementei na main, agora se ponho no construtor ó start ela inicia mas não pelo método decide e sim pq declarei uma instância da classe JAluno ou JPC no Main, e outra coisa quando ela entra no run do JAluno como faço pra que depois que ele execute sua função dê vez ao run de JPC se puderem ajudar é urgente as classes tão abaixo
public class Main{
JAluno aluno = new JAluno();
JPC pc = new JPC();
private Graphics g;
public void decide(){
while(true){
if (aluno.jogadaAluno)
aluno.iniciaAluno();
else
pc.iniciaPC();
}
}
public static void main(String args[]){
new TelaDeJogo();
Main m = new Main();
m.decide();
}
}
public class JPC implements Runnable{
/**
* Cria uma variável que será utilizada na
* criação da Thread
*/
private Thread runner1;
/**
* Variável utilizada como parâmetro na chamada do método desenha de TelaDeJogo
*/
private Graphics g;
/**
* Cria uma variável de JAluno utilizada na chamada de métodos desta classe
*/
JAluno aluno;
/**
* Instância que acessará o método desenha
*/
// Jogada ctrlJ = new Jogada();
public void iniciaPC(){
if (runner1 == null) {
runner1 = new Thread(this);
runner1.start();
}
}
public synchronized void run(){
if(aluno.jogadaA())
{
try {
runner1.sleep(20000);
}catch (InterruptedException ex) {
ex.printStackTrace();
}
}
//chama o método que efetua a jogada do PC
else{
JOptionPane.showMessageDialog(null,"tem");
// ctrlJ.desenha(g);
aluno.jogadaAluno = true;
}
}
}
public class JAluno implements Runnable{
/**
* Variável utilizada na chamada do método jogada de JPC
*/
JPC comp;
/**
* Cria uma variável que será utilizada na
* criação da Thread
*/
public Thread runner = new Thread();
/**
* Variável que será utilizada pela classe JPC para verificar
* se o Aluno está efetuando jogada num dado instante
*/
public boolean jogadaAluno = true;
/**
* Variável utilizada como parâmetro na chamada do método desenha de TelaDeJogo
*/
private Graphics g;
/**
* Instância que acessará o método desenha
*/
// Jogada ctrlJ = new Jogada();
public void iniciaAluno(){
if (runner == null) {
runner = new Thread(this);
runner.start();
}
}
/**
* Houve a jogada do PC e caso o mesmo já tenha efetuado sua
* jogada permite a jogada do aluno que é carregada na tela.
*/
public void run(){
//espera o PC efetuar a jogada enquanto jogada aluno for false
while(true){
if (!(jogadaAluno)){
try {
runner.sleep(20000);
}catch (InterruptedException ex) {
ex.printStackTrace();
}
}
//chama o método que efetua a jogada ou seja que pega os pontos e pinta o plano na tela
else{
// ctrlJ.desenha(g);
JOptionPane.showMessageDialog(null,"tem que dá certo");
jogadaAluno = false;
}
}
}
public boolean jogadaA() {
return jogadaAluno;
}
}