Olha só, eu tenho uma thread1 que é a interface gráfica do meu aplicativo, em especial as barras de progresso. Tenho uma thread2 que é o que o meu aplicativo faz e esta é observada [extends Observable] pela thread1.
Acontece que eu preciso que a thread1 monitore apenas uma parte da thread2, então eu dou um thread2.suspend(). Então eu passo essa thread2 como parâmetro para uma thread3, que é uma nova interface gráfica, no caso, uma nova janela, que precisa observar o resto da thread2. Então eu dou um thread2.resume() e aí pronto, seria simples e fácil se não fosse pelo fato de que uma NullPointerException é disparada nesse momento. Alguém sabe o que aconteceu?
Desculpe não ser mais específico, mas não entendi exatamente o que você quer fazer. Se puder dar mais detalhes, posso te ajudar melhor.
jonataswingeter
Olá.
Coloque o código fonte pro pessoal dar uma olhada.
Você já debugou a Thread3 para saber se ela já não está morta?
Talvez seja necessário Thread3.join() em relação a thread2.
Mas melhor você colocar o código e descrever o problema real, isto é, qual a idéia inicial. Assim poderemos saber se existe uma prática/técnica melhor.
Eu tava pondo o código aqui, mas ele é muito grande, tava todo tabulado e ficou desorganizado, fiquei com medo de vocês não compreenderem, então tô mandando logo o arquivo anexo, aí vocês podem abrir no editor Java de vocês.
gui.design.MainWindow inicia o aplicativo;
Dêem 50000, mais ou menos como entrada;
gui.design.ProcessStatus é o foco das threads e é onde tá dando a merda, coloquei uns comentários onde interessa;
thread2 cuida das progressBars e thread3 conta o tempo;
core.utils.FireProcess é a meta do programa, ainda está incompleta mas já funciona em parte;
if(thread2==null){
...
}
else{
thread2.resume(); //Isso certamente dá em nullpointer exception!
}
Vou analisar o resto do código aí posto mais.
Muito simples:
se thread ainda não começou
crie uma;
senão
continue uma; //a thread já terá sido criada e está pausada
Galera, descupa se o código tá muito amador, mas faz muito pouco tempo que eu programo em Java e só essa semana iniciei o contato com Multithreading ok? Valeu pela força que cês tão dando.
ViniGodoy
Quanto a estar amador ou não, isso não tem problema. Pra isso o forum existe!
bebad
Caras eu não sei quase nada sobre treads, estou precisando muito aprender des de o começo…
Preciso fazer um trampo MultiTread em Oreacle, é muito dificil ??
sera q eu consigo encarar…
valeu
ViniGodoy
Dependendo da aplicação sim, dependendo não. Tudo vai depender exatamente do que você tiver que fazer.
Quando estiver estudando o assunto, posta suas dúvidas aqui no GUJ que a gente ajuda a resolver.
Joao_Batista
ViniGodoy:
Vou repetir a máxima que venho dizendo para muita gente no GUJ: Uma thread não é um objeto.
Tenha isso fixo em mente quando for fazer programação multi-thread.
As threads são as linhas de execução. Existe um objeto que descreve essa linha de execução, mas ele não é a thread em si.
Desculpe não ser mais específico, mas não entendi exatamente o que você quer fazer. Se puder dar mais detalhes, posso te ajudar melhor.
Outra coisa: eu sei que os métodos thread.resume() e thread.suspend() são reprovados, inclusive o Eclipse faz um risco bem ignorante em cima do método. É engraçado, às vezes em vez de pausar a thread, o programa trava geral e só a JVM pra finalizar. Daí então entendi porque esses métodos são “deprecated”. Mas eu tentei usar o método thread.interrupt() e ele não funcionou e eu precisava de alguma coisa que pausasse a thread, entende?
dudaskank
Simples, use um atributo…
Não cheguei a ver o código, mas deve ter algum loop no seu run() certo?
Faça o loop verificar variáveis, mais ou menos assim:
while(run){
if(!pause){
//fazascoisas}
}
Os atributos run e pause são atributos boolean do objeto, e você pode setar via set/get.
rafaelt
bebad:
Caras eu não sei quase nada sobre treads, estou precisando muito aprender des de o começo…
Preciso fazer um trampo MultiTread em Oreacle, é muito dificil ??
sera q eu consigo encarar…
valeu
Pra começar comece a escreve “treads” certo: Thread.
Agora vamos lá: esse link tem vários documentos interessantes sobre threads, tudo em pdf, então você vai precisar do adobe reader.