java实现代码在线编译器

您所在的位置:网站首页 编译器是怎么开发的 java实现代码在线编译器

java实现代码在线编译器

2024-07-03 21:41| 来源: 网络整理| 查看: 265

零开始怎样上手获取所需知识

一直想为大创项目添加在线编程功能,但是时间原因一直未能践行。尽管如今在线编译运行功能已经不再稀奇,但貌似未能找到相关教程,只好自己花时间进行研究尝试。注:在线判题类似,暂时只做在线编译运行。 程序运行无非就是两个步骤:编译+运行(不是指那种解释型语言你懂的),像html、js能直接在浏览器运行的,无需后端编译环境。本例以Java为例编译(javac)+运行(java)

思路:搜索(项目所用为Java)如何运行系统命令,很容易找到Runtime,通过Runtime.getRuntime() 可以返回与当前 Java 应用程序相关的运行时对象。接着去搜索会发现它的exec()可以调用外部命令

关于exec()返回结果类型:Process,它有几个方法:

1.destroy():杀掉子进程 2.exitValue():返回子进程的出口值,值 0 表示正常终止 3.getErrorStream():获取子进程的错误流 4.getInputStream():获取子进程的输入流 5.getOutputStream():获取子进程的输出流 6.waitFor():导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止。如果已终止该子进程,此方法立即返回。如果没有终止该子进程,调用的线程将被阻塞,直到退出子进程,根据惯例,0 表示正常终止

大体思路有了,只需要定义好编译命令+运行命令扔到Runtime.getRuntime().exec()就能简单地实现程序的编译运行了。

第一个Demo

当然是来一个经典的Hello Word!了(先不管输入数据,只考虑输出流和错误流)。先封装一个工具类,方便之后反复调用,以及一个响应结果类Answer

工具类 /** * @Author deng * @Date 2022/3/1 0:52 */ import bean.Answer; import java.io.*; public class ExecUtil { //1.通过Runtime类得到实例,执行exec方法 //2.希望获取到标准输出,并写入到指定的文件中 //3.获取到标准的错误,并写入到指定文件中 //4.等待子进程结束,拿到状态码,并返回。 //防止不小心实例化工具类 private ExecUtil(){ } public static Answer run(String cmd,Boolean stdoutB,Boolean stderrB){ //System.out.println(cmd); Answer answer=new Answer(); try { //1.通过Runtime类得到实例,执行exec方法 Process process=Runtime.getRuntime().exec(cmd); //2.获取到标准输出,并写入到指定文件中 String line="",re="",stdout=""; if(stdoutB){ //windows上指定GBK中文才能正常显示,Linux还没试明先不管 //也会自动阻塞 BufferedReader stdoutFrom=new BufferedReader(


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3