Pessoal…
Estou criando 1 thread em android…
Mas nele não tem o EventQueue…
Como posso fazer sem ele, ou substituindo-o?
Código:
private class ClockRunnable implements Runnable {
public void run() {
try {
while (true) {
// EventQueue.invokeLater(new Runnable() {
// public void run() {
// }
// });
trocaimagem();
Thread.sleep(5000);
}
} catch (InterruptedException e) {
}
}
}
Tive que tirar onde tá com os //, pq não existe o EventQueue no Android…
Pensei que ia funcionar sem ele, mas mesmo assim ele dá pau…
Ele faz o trocaimagem() só 1 vez, e na proxima ele ja dá pau…
Eu xamo a thread assim:
Thread minhathread = new Thread(new ClockRunnable(), "MinhaThread");
minhathread.start();
Axo que precisava de algo ali no EventQueue
Deixa eu explicar melhor:
É 1 programa, que de 5 em 5 segundo, ele fica trocando uma imagem que ta na tela…
Se a imagem for a de id(0), vai pra id(1), até o id(10), e depois volta pro id(0)…
Só isso que preciso fazer nessa thread…
Chamar o método trocaimagem(), e travá-la por 5 segundos.
Existe 1 modo de fazer 1 thread “mais simples”?
PS: Eu tenho certeza que o erro não tá no trocaimagem()… Já fiz vários testes com ele…
E também ja tentei fazer outras coisas na thread, e ela só executa 1 vez, e na segunda dá pau.
Bem, a imagem creio que você esteja guardando em um JLabel, assim somente com a parte da Thread
não dá para vericar, realmente, qual é o erro, o bom seria você colocar o método que altera as images
e o método, se existir, que inicializa essa função da thread. Poste esses códigos aqui.
[quote=WendersonLP]Bem, a imagem creio que você esteja guardando em um JLabel, assim somente com a parte da Thread
não dá para vericar, realmente, qual é o erro, o bom seria você colocar o método que altera as images
e o método, se existir, que inicializa essa função da thread. Poste esses códigos aqui.[/quote]
Cara…
É android… É diferente, não é jLabel…
Eu queria saber como fazer 1 thread, que não necessite de EventQueue…
Eu já colokei a Thread para escrever uma contagem de 1 a 30 numa label…
Ele executa só 1 vez (de 1 vai para 2), e depois dá erro…
O erro é na thread mesmo…
Minha thread tá assim:
private class ClockRunnable implements Runnable {
public void run() {
try {
while (true) {
trocaimagem();
Thread.sleep(5000);
}
} catch (InterruptedException e) {
}
}
}
Era pra ela rodar assim?
Bem, a sua thread está correta, mais a especificação da alteração das imagens, que deve ser feitas o endereço de cada,
ela é determinada por index, cada String guardando um determinado endereço?
private class ClockRunnable implements Runnable {
public void run() {
try {
int i = 0;
while (true) {
lol(++i);
Thread.sleep(6000);
}
} catch (InterruptedException e) {
}
}
}[/code]
O que acontece:
Quando executa, ele inicia a thread, e põe o valor 1 no tvimc…
Depois de 6 segundos (Thread dorme por 6 segundos), quando era para ele continuar a thread, ele trava…
O problema ta na Thread…
Axo que a ela precisava disso:
EventQueue.invokeLater(new Runnable() {
public void run() {
}
});
Deve ser então
que bosta ! =/
Eu ja criei uns 4 tópicos no forum do android, mas é 1 bosta lah…
Nada comparado ao guj…
Criei o tópico faz 4 dias, e não tive nenhuma resposta…
Aki no guj de 1 em 1 minuto alguem responde =P
[quote=pedroroxd]Deve ser então
que bosta ! =/
Eu ja criei uns 4 tópicos no forum do android, mas é 1 bosta lah…
Nada comparado ao guj…
Criei o tópico faz 4 dias, e não tive nenhuma resposta…
Aki no guj de 1 em 1 minuto alguem responde =P[/quote]
Isso é verdade!
1º Não utilize while(true); Sempre use while(!Thread.isInterrupted())
2º Tratar a exceção InterruptedException mesmo que for apenas para mostra-la (ex.printStack).
3º Se for o caso, crie um try tratando apenas Exception! pois algo de estranho está acontecendo…
1º Não utilize while(true); Sempre use while(!Thread.isInterrupted())
2º Tratar a exceção InterruptedException mesmo que for apenas para mostra-la (ex.printStack).
3º Se for o caso, crie um try tratando apenas Exception! pois algo de estranho está acontecendo…
Tchauzin![/quote]
Em android não existe while(!Thread.isInterrupted())
Existe while(!Thread.interrupted())
serve também?
Otra coisa que percebi agora…
A primeira imagem, é 1 imagem da minha instituição…
A segunda é 1 imagem de java
A terceira é de ubuntu…
A quarta é do eclipse…
Quando ele xega na do java, ele dá pau…
Mas se eu não clicar no botão “Force Close” imediatamente, ele ainda muda para a imagem do ubuntu…
Mas fica a tela do erro ainda…
Ae tem que clicar no “Force Close”
Fiz o que a lina sugeriu…
Tá assim:
public class ClockRunnable implements Runnable {
public void run() {
try {
while(!Thread.interrupted()) {
trocaimagem();
Thread.sleep(2000);
}
} catch (InterruptedException e) {
try {
e.printStackTrace();
showDialog(1); //método que eu criei que mostra 1 mensagem escrito "ERROR"
} catch (Exception e2) {
}
}
}
}
Mas ele não printa nada, e não mostra a mensagem do erro…
Já tentei sem ser dentro desse outro trycatch, mas mesmo assim não acontece nada…
O programa trava, e não printa, e não mostra o dialog…
1º Não utilize while(true); Sempre use while(!Thread.isInterrupted())
2º Tratar a exceção InterruptedException mesmo que for apenas para mostra-la (ex.printStack).
3º Se for o caso, crie um try tratando apenas Exception! pois algo de estranho está acontecendo…
Tchauzin![/quote]
Em android não existe while(!Thread.isInterrupted())
Existe while(!Thread.interrupted())
serve também?[/quote]
Oi,
Serve sim! Estou sem compilador aqui… por isso respondi assim…
[quote=pedroroxd]Consegui resolver…
Thread.sleep não funciona em android!
para alguem que tenha a mesma dúvida, ficou assim:
final Handler handler = new Handler();
Timer t = new Timer();
t.schedule(new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
trocaimagem(); // fazer alguma coisa
}
});
}
}, 1, 3000); //3000 ms = 3 segundos[/quote]
TimerTask… bem pensado, já que Thread.sleep() não funciona ( :? ).