1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Java - Configurações atualizáveis em runtime

Olá meus amigos.

Eu estou desenvolvendo um software desktop com JAVA e cheguei a uma dúvida, provavelmente muito básica.

O sistema é feito com swing e as vezes precisa se conectar com o banco de dados online, mas ele também executa ações sem necessidade de conexão. Em primeiro lugar pensei em colocar as configurações de conexão como host, user, senha num arquivo .properties e tudo estava funcionando perfeitamente, mas chegou um momento onde fiz uma janela de configurações para o cliente poder modificar as configurações de conexão em tempo de execução e ao tentar salvar o arquivo .properties dentro do JAR uma surpresa, isso não pôde ser feito. Pelas minhas pesquisas e testes realmente não há como fazer isso, posso estar errado, mas neste caso não sei como fazê-lo.

Como normalmente é feito isso? Qual a estratégia para guardar arquivos importantes de modo seguro e fora do JAR?

-- Editando --

A exemplo de que eu tentei fazer a atualização do arquivo .properties em tempo de execução e não consegui, segue o erro que tenho com o seguinte código:

/home/pedepano/meuprograma.jar!/config/application.properties (Arquivo ou diretório não encontrado)
    at java.io.FileOutputStream.open0(Native Method)
    at java.io.FileOutputStream.open(FileOutputStream.java:270)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:101)
    at com.library.core.Configs.updateSimpleProperty(Configs.java:149)
    at com.print.model.business.caixa.cnab240.listmodel.AbstractCnab240ListModel.mouseClicked(AbstractCnab240ListModel.java:111)
    at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
    at java.awt.Component.processMouseEvent(Component.java:6528)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6290)
    at java.awt.Container.processEvent(Container.java:2234)
    at java.awt.Component.dispatchEventImpl(Component.java:4881)
    at java.awt.Container.dispatchEventImpl(Container.java:2292)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4542)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
    at java.awt.Container.dispatchEventImpl(Container.java:2278)
    at java.awt.Window.dispatchEventImpl(Window.java:2750)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Abrindo o arquivo:

Properties properties = new Properties();

InputStream in = this.getClass().getResourceAsStream("/config/application.properties");
properties.load(in);
in.close();

Tentando salvar o arquivo:

properties.setProperty(property, value);

URL url = this.getClass().getResource("/config/application.properties");
OutputStream out = new FileOutputStream(url.getFile());

// Atualiza arquivo de propriedades
properties.store(out, "Propriedades do sistema");
out.close();
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java swing properties ou faça a sua própria pergunta.