Pergunta

Eu tenho um programa Java que é principalmente GUI e mostra dados gravados em um arquivo XML em uma ferramenta de linha de comando C ++. Agora, quero adicionar um botão ao programa Java para atualizar os dados. Isso significa que meu programa precisa chamar a funcionalidade C ++.

A melhor maneira de chamar o programa de Java através de uma chamada do sistema? O programa C ++ será compilado para Mac OS e Windows e sempre deve estar no mesmo diretório que o programa Java.

Gostaria de gerar um executável que o programa C possa ser armazenado dentro do frasco e chamado do meu programa?

Foi útil?

Solução

Supondo que nenhum método de comunicação melhor esteja disponível (sabão, gelo, soquetes, etc.), eu chamaria o executável usando Runtime.exec(). O JNI pode ser usado diretamente para interface, mas eu não o recomendaria. Não, você não pode colocar um executável no frasco. Bem, você pode, mas você não pode executá -lo, pois o shell não sabe como executá -lo.

Outras dicas

Se você tem acesso ao código e deseja uma experiência 'interativa' com o programa externo (por exemplo, faça uma chamada, obtenha resultados, faça chamadas adicionais), investigue o JNI, que permite ligar para o código C ou C ++ de um aplicativo Java, incluindo a inclusão e vincular suco jni ao seu aplicativo C ou C ++ com.

Ver:

http://en.wikipedia.org/wiki/java_native_interface

http://www.acm.org/crossroads/xrds4-2/jni.html

Se você realmente precisar apenas de um tipo de solução "Lançar e obter resultados", consulte RunTime.exec (), que permite iniciar um programa externo e capturar sua saída.

Ver:http://www.javaworld.com/javaworld/jw-2000/jw-1229-traps.html?page=1

http://www.rgagnon.com/javadetails/java-0014.html

Você também pode querer olhar para o API de acesso nativo de Java (JNA).

Para responder à sua pergunta final, você não pode executar um executável de dentro do seu frasco.

No entanto, você posso Armazene -o dentro do seu frasco e extrai -o para um diretório/arquivo temporário antes de executá -lo (verifique se a presença na primeira vez e extraia, se necessário). Isso simplificará um pouco sua distribuição, pois você só tem o frasco para distribuir e garante que você esteja executando um executável que corresponda ao seu código Java Jarred.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top