Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

aprendiz19

[Resolvido] como deixar a aplicacao aberta uma unica vez

Recommended Posts

Ola galera, eu gostaria de saber como impedir que a tela da minha aplicacao abra um segunda vez, eu ja tentei ocupar uma porta, mas como a aplicacao eh sempre inicializada do startup do windows ela sempre abre uma outra vez a cada logon no servidor, eh um servidor que tem apenas um

logon mas pode ser feitas ate 2 duas conexoes ao mesmo tempo com o mesmo login, e por isso eu preciso que a tela da aplicacao seja aberta apenas uma vez mesmo quando ela eh iniciada pelo startup

 

 

No Aguardo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie um arquivo .lock sempre que sua aplicação for aberta e apague-o sempre que fechá-la.

 

Dessa forma, se o arquivo .lock existir, você sabe que já existe uma outra aplicação aberta e não permite a abertura de novas instâncias.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela sugestao, mas eu preciso excluir o arquivo do diretorio quando eu fechar a tela, você sabe como eu faco isso,

eu estou tentanto deletar pelo metodo WindowsClosing mas nao estou conseguindo...

 

alguem sabe como eu consigo deletar o arquivo quando a tela for fechada??

 

brigado e no aguardoo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode utilizar um listener para quando a janela for fechada, veja só:

 

Highlander.java

package com;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class Highlander {
	/**
	 * @param args
	 */
	public static void main( String[] args ) {
		final JFrame jFrame = new JFrame( "Uma janela Highlander" );
		final File lock = new File( ".lock" );

		/**
		 * Se o arquivo lock existir, mostramos o aviso que só pode existir uma
		 * janela
		 */
		if ( lock.exists() ) {
			JOptionPane.showMessageDialog( jFrame.getContentPane() , "There can be only one..." );
		} else {
			try {
				/**
				 * Criamos o lock
				 */
				lock.createNewFile();

				jFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
				jFrame.addWindowListener( new WindowAdapter() {
					/**
					 * Observamos o evento de fechamento da janela e, se ela for
					 * fechada, apagamos o arquivo lock
					 */
					@Override
					public void windowClosing( WindowEvent e ) {
						/**
						 * Apagamos o arquivo lock quando a janela for fechada
						 */
						lock.delete();
					}
				} );

				jFrame.setSize( 300 , 200 );
				jFrame.setVisible( true );
			} catch ( final IOException e ) {
				// Opz, não conseguimos gravar o arquivo.
				// temos permissões para isso ?
				e.printStackTrace();
			}
		}
	}
}

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela resposta, no entanto na hora de implementar o metodo de deletar, simplesmente nao acontece nada...

O q serah?

olhe o meu codigo como estah

public final class PrincipalChamador {

/*private static  PrincipalChamador AT;
public static PrincipalChamador getInstance() {
    if( AT == null) {
        //ativaAt = new PrincipalChamador();
        synchronized(PrincipalChamador.class) {
        if(AT == null) {
            AT = new PrincipalChamador();
            Atualizador atualiza = new Atualizador();
            atualiza.setVisible(true);
        }
    }
  }
    return AT;
}
 *
 */

    
public static void main(String args[])
{

    final CriaArquivo atualizadorArq = new CriaArquivo();
    //File existencia = atualizador.getArquivo();


  if(atualizadorArq.obterArqs())
  {
      System.exit(0);
  }
  else
  {
        atualizadorArq.criandoArquivo();
        Atualizador atualizador = new Atualizador();
        atualizador.setVisible(true);
        atualizador.botaoAtualizar();
        atualizador.setDefaultCloseOperation(Atualizador.EXIT_ON_CLOSE );
        atualizador.addWindowListener( new WindowAdapter() {
            /**
             * Observamos o evento de fechamento da janela e, se ela for
             * fechada, apagamos o arquivo lock                                         */
            @Override
            public void windowClosing( WindowEvent e ) {
                /**
                 * Apagamos o arquivo lock quando a janela for fechada
                 */
                   atualizadorArq.deletarArquivo();
            }
        } );

        /*
        atualizador.setDefaultCloseOperation(Atualizador.EXIT_ON_CLOSE );
        atualizador.addWindowListener(new WindowAdapter() {
                /**
                 * Observamos o evento de fechamento da janela e, se ela for
                 * fechada, apagamos o arquivo lock                                         *
                @Override
                public void windowClosing( WindowEvent e ) {
                    File deletarArq = new File("C:\\Documents and Settings\\abalbino\\Meus documentos\\TestesJava\\");
                    File []lista = deletarArq.listFiles();
                    lista[0].delete();
                }                                } );
         *
         */

        

  }

    //getInstance();
    /*AppLock travaPorta = null;
    int porta = 4444;
    try {
        if(AppLock.isLocked(porta))
        {
           System.exit(0);
        }

 else {
         Atualizador atualizador = new Atualizador();
         atualizador.setVisible(true);
         atualizador.botaoAtualizar();
         travaPorta = new AppLock(porta);
         travaPorta.lock();
       }

        }
    catch(Exception e) {
            Atualizador excecao = new Atualizador();
        }
     *
     */




    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

na hora de implementar o metodo de deletar, simplesmente nao acontece nada...

 

Você testou o código que lhe passei ? Ele funciona ?

 

O q serah?

olhe o meu codigo como estah

 final CriaArquivo atualizadorArq = new CriaArquivo();

Poste o código desse CriaArquivo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não li seu código. li superficialmente os posts. Por isso, apenas lembro-lhes que antes de mais nada deve-se verificar se você tem permissão no SO para excluir arquivos em determinada pasta. Se você tiver o arquivo aberto na aplicação, você só conseguirá excluí-lo após fechá-lo. Verifique também se o arquivo criado permite escrita. Sei que em java.io.File tem o método setWritable e afins.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não li seu código. li superficialmente os posts. Por isso, apenas lembro-lhes que antes de mais nada deve-se verificar se você tem permissão no SO para excluir arquivos em determinada pasta. Se você tiver o arquivo aberto na aplicação, você só conseguirá excluí-lo após fechá-lo. Verifique também se o arquivo criado permite escrita. Sei que em java.io.File tem o método setWritable e afins.

 

Eu consigo manipular normalmente o arquivo q eu crio, posso criar, escrever, excluir, eu ateh fiz uma classe que deleta o arquivo na pasta, ela funciona, mas quando eu coloco no metodo WindowClosing nao acontece nada...

 

aqui vai o meu codigo da classe que cria o arquivo como pedido...

public class CriaArquivo {
  private FileWriter arquivo;
  private File arq = new File("C:\\Documents and Settings\\abalbino\\Meus documentos\\TestesJava\\",
                    "AtualizadorExecutando.txt");
  private File listaArq = new File("C:\\Documents and Settings\\abalbino\\Meus documentos\\TestesJava\\");
  private File []lista = listaArq.listFiles();
  

public void criandoArquivo() { 
    try {
            arquivo = new FileWriter(arq);
        }

    catch(Exception e) {
        e.getMessage();
    }
 }

public void deletarArquivo(){
      File deletarArq = new File("C:\\Documents and Settings\\abalbino\\Meus documentos\\TestesJava\\");
      File []lista = deletarArq.listFiles();
      lista[0].delete();
}

public boolean obterArqs() {
   
    if(lista.length>0 && lista!=null)
        return true;
    else
        return false;

}



}

Não li seu código. li superficialmente os posts. Por isso, apenas lembro-lhes que antes de mais nada deve-se verificar se você tem permissão no SO para excluir arquivos em determinada pasta. Se você tiver o arquivo aberto na aplicação, você só conseguirá excluí-lo após fechá-lo. Verifique também se o arquivo criado permite escrita. Sei que em java.io.File tem o método setWritable e afins.

 

Eu fiz uma classe soh para fazer a exclusao do arquivo na pasta e consegui normalmente, soh nao consigo quando uso no metodo WindowClosing mesmo.

Aqui vai a classe de criacao de arquivo.

 

public class CriaArquivo {
  private FileWriter arquivo;
  private File arq = new File("C:\\Documents and Settings\\abalbino\\Meus documentos\\TestesJava\\",
                    "AtualizadorExecutando.txt");
  private File listaArq = new File("C:\\Documents and Settings\\abalbino\\Meus documentos\\TestesJava\\");
  private File []lista = listaArq.listFiles();
  

public void criandoArquivo() { 
    try {
            arquivo = new FileWriter(arq);
        }

    catch(Exception e) {
        e.getMessage();
    }
 }

public void deletarArquivo(){
      File deletarArq = new File("C:\\Documents and Settings\\abalbino\\Meus documentos\\TestesJava\\");
      File []lista = deletarArq.listFiles();
      lista[0].delete();
}

public boolean obterArqs() {
   
    if(lista.length>0 && lista!=null)
        return true;
    else
        return false;

}




}

obrigado pelas respostas pessoal, e to aguardo tbm :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo,

 

Teste o código que lhe passei anteriormente, sem qualquer modificação, apenas complie e execute-o.

 

Após esse teste, volte dizendo se ele funcionou, se foi possível abrir duas janelas da aplicação ao mesmo tempo e se o arquivo foi gravado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo,

 

Teste o código que lhe passei anteriormente, sem qualquer modificação, apenas complie e execute-o.

 

Após esse teste, volte dizendo se ele funcionou, se foi possível abrir duas janelas da aplicação ao mesmo tempo e se o arquivo foi gravado.

 

 

Oi, eu consegui executar o codigo dessa vez vlw!!!

 

Mas agora eu preciso tirar uma nova duvida que tem um assunto diferente, devo criar um novo topico pra isso??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas agora eu preciso tirar uma nova duvida que tem um assunto diferente, devo criar um novo topico pra isso??

 

Se a dúvida não tiver relação com essa desse tópico, então é interessante criar um novo tópico para marcarmos este como resolvido.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Mas agora eu preciso tirar uma nova duvida que tem um assunto diferente, devo criar um novo topico pra isso??

 

Se a dúvida não tiver relação com essa desse tópico, então é interessante criar um novo tópico para marcarmos este como resolvido.

 

;)

 

 

entao pode marcar como resolvido sim, vou a postar a duvida em outro topico... vlw!! :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi, to voltando ao topico pq tem um problema com essa geracao de arquivo em uma pasta pq o programa tem q sempre mostrar a tela quando alguem

se conectar ao servidor, e se a energia cair de repente o programa nao vai abrir...

alguem tem alguma solucao??

 

 

No aguardo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.