与终端应用程序Java或C ++交互

时间:2016-02-06 21:04:12

标签: java terminal

我正在尝试创建一个与基于终端的程序交互的GUI,在本例中是以太坊的geth控制台。我能够启动它,但我不知道如何在运行时发送命令或检索输出。

我已经尝试过其他程序,比如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,因为我对它更熟悉。

1 个答案:

答案 0 :(得分:0)

On the GO-Ethereum Wiki它说它支持:

  • 一个JavaScript控制台。你必须用JavaScript编写应用程序 - 这可能不是一个选择;
  • JSON RPC服务器,在这种情况下,您通过套接字进行通信,而不是STDIN / OUT;
  • Commandline Options,在这种情况下你会

    public static void main( String[] args )
        throws JsonParseException, JsonMappingException, IOException {
    
        final String INPUT_JSON = "{\"start\" : \"11/23/2016\"}";
        // final String INPUT_JSON = "{\"start\" : \"1972-12-28T12:00:01.000Z\"}";
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule( new JodaModule() );
        DateFormat dateFormat = new SimpleDateFormat( "MM/dd/yyyy" );
        objectMapper.setDateFormat( dateFormat );
        Bean bean = objectMapper.readValue( INPUT_JSON, Bean.class );
        DateTime start = bean.getStart();
        System.out.println( start );
    }
    
    public class Bean {
       public DateTime start;
    
       public Bean() {
        // TODO Auto-generated constructor stub
       }
    
       public DateTime getStart() {
        return start;
      }
    
      public void setStart( DateTime start ) {
        this.start = start;
      }
    }