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.
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!!!
brothermclaud
Vou colar aqui o código que to usando…
importjava.io.*;importjava.util.*;publicclassMaple{//definindo a variável de entrada e o comando a ser executado no maplestaticStringcmd="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 maplestaticPrintWriterout;privateProcessprocess;// processo usado para executar o mapleprivateOutputStreammaple_input;privateBufferedReadermaple_output;publicMaple()throwsIOException{this.process=Runtime.getRuntime().exec("cmaple.bat -q");this.maple_input=process.getOutputStream();this.maple_output=newBufferedReader(newInputStreamReader(process.getInputStream()));}// Método para fechar a sessão do maplepublicvoidclose()throwsIOException{Stringquit="quit\n";maple_input.write(quit.getBytes());maple_input.flush();try{process.waitFor();}catch(InterruptedExceptionex){}}// Método para executar o comando da string 'cmd' e escrever os resultados na variável 'out'. publicsynchronizedvoidexec(Stringcmd,PrintWriterout)throwsIOException,NullPointerException{// executando o comando da string 'cmd'StringCmd=cmd+";\n";maple_input.write(Cmd.getBytes());maple_input.flush();// Armazenando os comandos em um logSystem.out.println("> "+cmd+";");// Para detectar o fim das saídas do Maple para o comando em 'cmd' e colocando a string 'terminator_cmd' no fimStringterminator_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: Strings;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 Maplepublicstaticvoidmain(Stringargs[])throwsIOException,NullPointerException{Mapleteste=newMaple();teste.exec(cmd,out);teste.close();}}