Tem como eu fazer meu programa só executar 1 vez a cada vez que o pc for ligado??
Como um serviço?
Você quer que ao iniciar o pc, este programa seja inicializado e fique rodando em background(serviço)
ou você quer que seu programa execute ao iniciar o pc e depois a execução será finalizada?
Coloque um atalho do .jar do teu programa no Inicializar do teu windows (Todos os programas - > Inicializar).
Para fazer ele rodar apenas uma vez vc vai ter que configurar isso na tua aplicação, por exemplo se o programa utiliza thread, vc pode implementar uma logica para a thread rodar apenas uma vez e depois “destruir” a aplicação.
[quote=Lucas Abbatepaolo]Você quer que ao iniciar o pc, este programa seja inicializado e fique rodando em background(serviço)
ou você quer que seu programa execute ao iniciar o pc e depois a execução será finalizada?[/quote]
Tipo o usuário executar o programa 1 vez, se ele for executa de novo o programa não vai executar, para isso ele tem que reiniciar o pc…
Deu pra entender??
[quote=Piabao]Coloque um atalho do .jar do teu programa no Inicializar do teu windows (Todos os programas - > Inicializar).
Para fazer ele rodar apenas uma vez vc vai ter que configurar isso na tua aplicação, por exemplo se o programa utiliza thread, vc pode implementar uma logica para a thread rodar apenas uma vez e depois “destruir” a aplicação.
[/quote]
Tem inicializar assim no ubuntu??
O programa é simples(pelo menos esse de teste), tem uma maneira fazer sim thread?
no uBuntu se não me engano é assim . . .:
vai em Sistema>Preferência>Aplicativos de Sessão>Adicionar
No campo nome ponha o nome do seu aplicativo.
Em comando: ponha o caminho do .jar ex.: /usr/bin/meuProgramaJava
Comentário pode deixar vazio.
Tem como fazer sem thread sim kra, é soh aplicar uma logica simples . . . por exemplo:
utilize um metodo para fechar a aplicação, e depois de executar todos os metodos do seu programa chame o metodo ou utilize uma condição expecifica que chama o metodo para fechar o programa.
exemplo:
public class SeuPrograma {
private static void conteudo(){
//aki vai todo o conteudo ou os metodos do seu programa
// no fim dos seus metodos chame o metodo que finaliza seu programa
fecha();
}
private static void fecha(){
System.out.println("fechou");
System.exit(0);
}
public static void main(String[] args) {
conteudo();
}
}
Não precisa de thread para executar se for algo simples, pode executar na main msm…
O local para inicializar junto com maquina vai depender do sistema operacional (tambem nada critico).
A questão é como bloquear o usuario de executar isto novamente.
Eu naum tenho ideia de como fazer isso…mais vamos as hipoteses.
Creio que no linux vc possa deixar este arquivo com permissão de execução para determinado usuario, e não permitir que o usuario normal possa executar tal aplicativo. Sendo assim ao iniciar seu SO vc pede pro sistema executar aquele arquivo.
No windows acho q seria mais ou menos por ai…so teria que verificar melhor as questoes do acesso.
Qnd pitar a solução não esquece de postar ai pra gente…
flw
Pode criar um arquivo na inicialização do seu sistema, e comparar a data do arquivo com o tempo em que o SO está ativo. Tem o comando no linux “uptime”, no windows tinha um que não lembro.
E como eu faço isso??
Eu pensei no seguinte não sei se estou “voando nas ideias aki” então…
Eu faço um programa que vai iniciar sozinho sem aparecer pro usuário ao iniciar ele vai atribuir + 1 em um atributo que vou salvar no BD ao ele atribuir +1 coloco um close e fecha.
No outro programa que eu quero que só execute uma vez ele vai executar pegando o atributo do outro programa e vai armazenar em um atributo próprio.
Ao executar de novo o programa ele vai olhar se os atributos dos 2 programa são iguais se for o programa não executa.
Oq vcs acha?
Para fazer eu acho simples mais para colocar em varios pc vai dar um pouco de trabalho pois vou ter 2 .jar e BD
Mais foi o meio executável mais simples que pensei e nem sei se da certo… ;;
E como eu faço isso??[/quote]no Windows, você pode usar o tasklist (pode chamar comando de sistema em java) e buscar o processo mais antigo (o System IDLE Process tem exatamente a mesma idade que o uptime do windows).
No linux, você pode usar o comando uptime, que te retorna em anos/meses/dias/horas/minutos/segundos que o sistema está ligado. Bastaria você pegar essa entrada dele (em string) e transformar em data.
[quote=wellington.nogueira]Que nivel de acesso os usuários terão? Se for um usuário comum (ou seja, sem privilégios e sem possibilidade de acesso a perfis administrativos da máquina) faça como o @Lucas Abbatepaolo falou. Crie a aplicação e modifique o atributo do arquivo para um grupo que apenas um perfil administrativo tenha acesso e deixe que o SO execute o mesmo.
Talvez necessite também de uma redundância por arquivo ou através da base de dados.
No fim, se os usuários tiverem perfis administrativos, pode ser que nada disso funcione. Basta o usuário ter acesso ao procedimento e já era…
A questão é, realmente esse programa só deve ser executado uma vez?
Outra forma é deixar a aplicação rodando na memória (nunca fechar) e essa aplicação bloqueie um arquivo para ela. Caso a aplicação seja executada novamente, ela tenta bloquear o arquivo para si (como já vai estar bloqueada não vai conseguir, aí é só terminar essa segunda aplicação).[/quote]
Sim, para o programa que eu quero fazer só deve se executado 1 vez e se for executar de novo tem que reiniciar, isso mesmo que eu quero… rsrsrs Estranho né?
Não tem nível de acesso, tudo que um pode fazer o outro também pode.
Não é ruim deixa a aplicação na memoria ocupando espaço? mesmo sendo pouco…
Que nivel de acesso os usuários terão? Se for um usuário comum (ou seja, sem privilégios e sem possibilidade de acesso a perfis administrativos da máquina) faça como o @Lucas Abbatepaolo falou. Crie a aplicação e modifique o atributo do arquivo para um grupo que apenas um perfil administrativo tenha acesso e deixe que o SO execute o mesmo.
Talvez necessite também de uma redundância por arquivo ou através da base de dados.
No fim, se os usuários tiverem perfis administrativos, pode ser que nada disso funcione. Basta o usuário ter acesso ao procedimento e já era…
A questão é, realmente esse programa só deve ser executado uma vez?
Outra forma é deixar a aplicação rodando na memória (nunca fechar) e essa aplicação bloqueie um arquivo para ela. Caso a aplicação seja executada novamente, ela tenta bloquear o arquivo para si (como já vai estar bloqueada não vai conseguir, aí é só terminar essa segunda aplicação).
[quote=xandi_m5]Não tem nível de acesso, tudo que um pode fazer o outro também pode.
Não é ruim deixa a aplicação na memoria ocupando espaço? mesmo sendo pouco…
[/quote]Depende do que mais vai rodar na máquina e/ou limitações de memória que existam.