Caras, sou novo em java e preciso de ajuda numa tarefa hercúlea. Já consigo abrir uma aplicação através do java, mas gostaria de enviar dados do proprio java (como algo digitado em uma textfield) para esta aplicação e obter a resposta dessa aplicação externa no java (como exibir a resposta em uma textarea).
Ainda não li nada aqui no forum sobre isso. Agradeço muito a todos que puderem ajudar.
nao sei direito se serve…
mas dá uma pesquisada sobre JNI - Java Native Interface…
aqui voce pode ter mais informaçoes:
http://java.sun.com/docs/books/tutorial/native1.1/
Dê uma olhada na documentação da classe java.lang.Runtime especialmente nos métodos 'exec' que retornam um Process. O uso deste mátodo é um tanto quanto 'tricky', procure por exemplos na web, com isso vc consegue o quer.
Vi a sua sugestão Claudio, mas ñ consegui achar nada que me ajudasse. Estou tentando usar OutputStream e BufferedReader para a entrada e a saida do programa, respectivamente, mas não to conseguindo. O problema é, especificamente, que eu não sei se o programa externo recebe a string que eu tento manda pelo OutputStream e também ñ sei ler o conteúdo do BufferedReader. Helpme please!!!
Vou colar aqui o código que to usando…
import java.io.*;
import java.util.*;
public class Maple {
//definindo a variável de entrada e o comando a ser executado no maple
static String cmd = "a := int(x^2,x); save a, `Maple_out.txt`; quit" ;
/*
Os dois últimos comandos da lista acima ('save a, `Maple_out.txt`' e 'quit') só foram colocados para garantir o teste da classe.
A resposta do maple ao comando em 'cmd 'não está sendo armazenada na variável abaixo (static PrintWriter out), cheguei a esta
conclusão pelo debug do programa.
Também não funciona o método close() que deveria fechar a sessão do programa Maple
*/
//definindo a variável de saída do maple
static PrintWriter out;
private Process process; // processo usado para executar o maple
private OutputStream maple_input;
private BufferedReader maple_output;
public Maple() throws IOException {
this.process = Runtime.getRuntime().exec("cmaple.bat -q");
this.maple_input = process.getOutputStream();
this.maple_output = new BufferedReader(new InputStreamReader(process.getInputStream()));
}
// Método para fechar a sessão do maple
public void close() throws IOException {
String quit = "quit\n";
maple_input.write(quit.getBytes());
maple_input.flush();
try{ process.waitFor(); } catch(InterruptedException ex) {}
}
// Método para executar o comando da string 'cmd' e escrever os resultados na variável 'out'.
public synchronized void exec(String cmd, PrintWriter out) throws IOException, NullPointerException {
// executando o comando da string 'cmd'
String Cmd = cmd + ";\n";
maple_input.write( Cmd.getBytes() );
maple_input.flush();
// Armazenando os comandos em um log
System.out.println("> "+ cmd + ";");
// Para detectar o fim das saídas do Maple para o comando em 'cmd' e colocando a string 'terminator_cmd' no fim
String terminator_cmd = "JAVA: END OF A MAPLE COMMAND IS HERE";
maple_input.write( ("printf(`" + terminator_cmd + "\\n`):\n").getBytes() );
maple_input.flush();
// Lendo a saída, linha a linha, antes de terminator_cmd ser lido:
String s;
while(true) {
s = maple_output.readLine();
if (s.indexOf(terminator_cmd) != -1 ) {
break;
}
if (out != null) {
out.println(s);
}
}
}
//para criar uma nova instância executável da classe Maple
public static void main( String args[] ) throws IOException, NullPointerException {
Maple teste = new Maple();
teste.exec( cmd, out );
teste.close();
}
}
O que vcs acham???
Alowwwww… será que alguém pode me ajudar???