2016-02-06 2 views
0

Я пытаюсь создать графический интерфейс, который будет взаимодействовать с терминальной программой, в данном случае консоль geth для Ethereum. Я могу запустить его, но я не знаю, как отправлять команды или извлекать выходные данные после его запуска.Взаимодействие с терминальным приложением Java или C++

Я пробовал другие программы, такие как Vim, но все полностью отделено от моей программы после ее запуска, и я не могу дать ей никаких дополнительных команд.

После поиска решений StackOverflow и соответствующих решений, это то, что я придумал, и это самое близкое, что я пришел к успеху.

public static void main(String[] args) throws IOException{ 
     String[] command = {"gnome-terminal", "-e", "vim temp.txt"}; 

     Process proc = Runtime.getRuntime().exec(command); 

     BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream())); 
     BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())); 

     writer.write(":x"); 
     writer.flush(); 
     writer.close(); 
    } 
} 

Это запустит Vim, создав temp.txt, но тогда Vim просто сидит, и автор ничего не делает.

Является ли то, что я пытаюсь сделать, даже возможно?

P.S. Я в порядке с C++, но я бы предпочел Java для этого, поскольку я больше знаком с ним.

+0

Как правило, интерактивные программы не работают таким образом. Вы можете читать/записывать процессы, но только stdin/stdout/stderr. Если это программа графического интерфейса, она будет зависеть от отправки ОС ее сообщений, таких как щелчки мыши, нажатия клавиш и т. Д. Что именно вы пытаетесь достичь? Если вы просто хотите вводить команды в терминальной программе и читать их вывод, просто выполните эти команды напрямую. – Kenney

+0

Я изучаю криптовалютность, и это в конечном итоге станет графическим интерфейсом для Ethereum, который очень похож на биткойн. Большинство доступных в настоящее время графических интерфейсов являются ошибками и все еще находятся в разработке. Один из моих товарищей по команде работает над исправлениями для одного, но я пытаюсь начать с нуля и сделать что-то, что специализируется на наших потребностях. – halfg33k

+0

Что значит «писатель ничего не делает»? Является ли количество записанных байтов равным нулю? – specializt

ответ

0

On the GO-Ethereum Wiki он говорит, что он поддерживает:

  • в консоли JavaScript. Вам нужно будет написать приложение в самом JavaScript - возможно, здесь не вариант;
  • сервер JSON RPC, и в этом случае вы будете общаться через сокет, а не STDIN/OUT;
  • Commandline Options, в этом случае вы

    String[] command = {"geth", "help" };