enho um programa que começa uma thread pausa cancela legal mas quando eu começo e pauso se eu fexar o programa e abrir denovo ela nao vai estar lá e não vai poder ocntinuar de onde parou, tem como fazer isso? reniciar uma thread de onde ela parou depois que reabrir um programa?
Se você deu um Dispose geral no seu programa, um close de todas as telas, quando você abrir seu programa denovo ele vai executar todas as threads do início, Todas a linhas de comando…
pois é… eu fexei meu programa e quando abrir denovo tenho que começar tudo do inicio… tem como salvar essa thread pra depois que eu abrir meu programa começar de onde ela parou?
Pelo que eu saiba não.
Talvez algum programador mais experiente possa te responder…
Mas porque você quer fazer isso ??
nao tem como vc gravar alguns dados num bd… e depois apartir deles voltar onde estava?
Tem.
Mas como voce saberia aonde voce parou.
e o que essa variavel no banco iria receber.
Não tem como criar uma variavel para receber o valor da linha de comando que esta sendo executado ex:(linha 12).
A nao ser q sua thread seja pequena, o que acho improvavel.
voce poderia criar restrições com If.
Poste sua thread para facilitar.
Voce deve gravar em um arquivo o estado atual da thread para depois o programar ler esse arquivo e saber como continuar.
Isso não é padrão da API voce vai ter que implementar isso.
Desculpe se eu estiver falando besteira mas se eu entendi, tu queres fechar a janela e quando abrir de novo continuar executando a thread, certo? Cria uma referência para ela em outra classe fora da janela, e depois crie ela assim tu podes conseguir essa refência na tua janela e quando precisar fechar ela ainda vai estar ativa em outro objeto.
Se o problema for fechar o programa com um System.exit(0); ai a coisa complica, e nesse caso o que os colegas disseram faz sentido.
Espero ter ajudado…
No tempo em que o pessoal criava jogos em C, costumava-se guardar tudo em um bloco gigante na memória, e salvar tudo em um arquivão no disco. Quando se queria recuperar o estado do jogo, lia-se o arquivão inteiro, via-se se ele estava corrompido (sabe como é que é, você poderia simplesmente aumentar suas vidas se você soubesse onde é que elas ficavam gravadas nesse arquivo) e então continuava-se o jogo.
estou tentando fazer o que o mark disse
em uma outra classe criei esse metodo
[code] public void grava() throws IOException{
Download download = null ;
FileWriter writer = new FileWriter(download.getUrl());
PrintWriter saida = new PrintWriter(writer);
saida.println(download.getUrl()+ "\n"+ download.getSize() + "\n" + download.getProgress() + "\n" + download.getBaixado() + "\n" + download.getSite());
saida.println("teste");
saida.close();
writer.close();
}[/code]
basicamente ele grava os dados… daí estou tentando fazer com que a classe download grave nos txts e na tabela onde antes aparecia os retornos do downoad… começe a ler o txt e monstrar os valores… mas por iquanto esse metodo nao ta funcionando
O problema é que voce esta fechando o programa. Ou seja, o valor de todas as variaveis serao apagadas.
e jogo salva sim um pacote de dados gigante, mas com informações apenas.
começar uma Thread de onde parou é meio complicado porque nao tem informação para armazenar.
Acho que voce nao vai conseguir fazer isso meu amigo, desculpe.
Mas nos diga para que voce quer isso. Talvez aja outra solução
“Gravar o estado” Significa fazer uma maquina de estados.
A ideia eh essa:
Vc predefine etapas do processo da sua thread, por ex:
[list]Inicio[/list]
[list]passo1[/list]
[list]passo2[/list]
[list]passo3[/list]
[list]fim[/list]
Agora, vc cria um sinalizador (pode ser enum ou integers) para representar o estado.
public enum State{INIT,STEP1,STEP2,STEP3,FINISHED}
E agora vc pega o processo da sua thread e separa eles numa estrutura meio parecida com um switch:
public void run(){
switch(getCurrentState()){
case INIT: init(...); setCurrentState(STEP1);
case STEP1: step1(...); setCurrentState(STEP2);
...
case STEP3: step3(...); setCurrentState(FINISHED);
case FINISHED: break;
}
}
Alem disso, se vc nao estiver persistindo os dados utilizados, vc precisara persistir O ESTADO DOS OBJETOS UTILIZADOS NO MOMENTO DA CHAMADA A SETCURRENTSTATE em algum arquivo texto. Assim, se ocorrer problema e precisar reiniciar, apenas uma parte minima do processo tera que ser refeita.
Sacou a ideia?
é uma especie de gerenciador de download dedicado é um projeto de java pra eu aprender tipo esse programa tem um monde de coisas, thread, banco de daos, construtores, table models entre outras coisas
dai ogerenciador em si está pronto mas quando eu fexo o programa quando eu abrir denovo quero retomar o download de onde ele parou
Podia ser mesmo essa a ideia mas acredito que Download precisa ser passado por parametro.
public void grava(Download download) throws IOException{
FileWriter writer = new FileWriter(download.getUrl());
PrintWriter saida = new PrintWriter(writer);
saida.println(download.getUrl()+ "\n"+ download.getSize() + "\n" + download.getProgress() + "\n" + download.getBaixado() + "\n" + download.getSite());
saida.close();
writer.close();
}
Ou você pode serializar o objeto Download para um arquivo.
Quanto às características do objecto Download, ele baixa e salva em qual arquivo? Não é importante isso também para ser gravado no arquivo? E se você tiver o local onde o arquivo está salvo, não precisa serializar o número de bits baixados (por que será o tamanho do arquivo) e também não precisaria do tamanho total (porque o servidor HTTP informa isso) e do progresso (pois basta dividir uma coisa por outra).
bem consegui salvar ficou assim
FileWriter writer = null;
try {
writer = new FileWriter(download.getSize()+".txt");
} catch (IOException ex) {
Logger.getLogger(DownloadsTableModel.class.getName()).log(Level.SEVERE, null, ex);
}
PrintWriter saida = new PrintWriter(writer);
saida.println(download.getUrl()+ " \n "+ download.getSize() + " \n " + download.getProgress() + " \n " + download.getBaixado() + " \n " + download.getSite());
saida.close();
try {
writer.close();
} catch (IOException ex) {
Logger.getLogger(DownloadsTableModel.class.getName()).log(Level.SEVERE, null, ex);
}
o new FileWriter(download.getSize()+".txt"); é temporario depois eu mudo
ai gravou certinho um exemplo que eu fiz foi com esse EXE de wallpaper que peguei no baixaki
o txt ficou assim
[quote]/coi-uk/wallpapersca/exe/2/wallpapers.exe
477
25.221378
123272
http://estc.asp.msn.com/coi-uk/wallpapersca/exe/2/wallpapers.exe
[/quote]
477 é o tamnho
25 a porcentagem
123272 o que foi baixado em bytes
e o ultimo é a url
agora é so fazer a tabela ler arquivo por arquivo
É o que eu imaginava mesmo.
Se tu estiver numa máquina virtual pelo que sei dá para gravar “snapshots”, que devem ser arquivos descritores detalhistas do estado da máquina virtual, incluindo conteúdo na memória RAM virtual, conteúdo dos registradores da CPU virtual, conteúdo nos barramentos/buffers da máquina virtual, conteúdo do hd virtual e etc.
Então, se teu aplicativo estiver rodando numa máquina virtual com suporte a esse recurso tu deve poder “reiniciar um programa e reiniciar um thread de onde tinha parado”.
Inté.