如何编译和运行C、java和C++中的任意位置的文件? 我正在创建一个编辑器类的应用程序,在这里我要编译和运行当然是创建、编辑、打开C、C++和java文件; 我正在用Java创建它
现在,为了编译和运行,我选择了文件的整个路径 并通过此完整路径编译和运行 例如如何编译和运行C、java和C++中的任意位置的文件? 我正在创建一个编辑器类的应用程序,在这里我要编译和运行当然是创建、编辑、打开C、C++和java文件; 我正在用Java创建它,java,compilation,Java,Compilation,现在,为了编译和运行,我选择了文件的整个路径 并通过此完整路径编译和运行 例如 compileFileCommand = javac /media/disk/eclipse/\/UniversalIDE/Java/FirstJava.java try { System.out.println("Compiling Java File"); Process compileProcess = Runtime.getRuntime().exec(compileFileCommand
compileFileCommand = javac /media/disk/eclipse/\/UniversalIDE/Java/FirstJava.java
try
{
System.out.println("Compiling Java File");
Process compileProcess = Runtime.getRuntime().exec(compileFileCommand);
compileProcess.waitFor();
String line = "";
BufferedReader bri = new BufferedReader(new InputStreamReader(compileProcess.getInputStream()));
BufferedReader bre = new BufferedReader(new InputStreamReader(compileProcess.getErrorStream()));
while ((line = bri.readLine()) != null)
{
System.out.println(line);
}
bri.close();
while ((line = bre.readLine()) != null)
{
System.out.println(line);
}
bre.close();
compileProcess.waitFor();
System.out.println("Done Java Compile.");
} catch (Exception e)
{
// TODO: handle exception
System.out.println("Exception in Java Compile. ");
System.out.println(e.getMessage());
}
上面的代码运行良好,并在java文件的位置创建了一个类文件
用于运行Java文件
runFileCommand = java /media/disk/eclipse/\/UniversalIDE/Java/FirstJava
对于运行C&CPP文件,执行相同的过程
用于C编译
String compileFileCommand = "gcc " + fileNameWithFullPath;
String compileFileCommand = "g++ " + fileNameWithFullPath;
用于C运行
String runFileCommand = "./" + fileNameWithFullPath.split(".c")[0];
用于CPP编译
String compileFileCommand = "gcc " + fileNameWithFullPath;
String compileFileCommand = "g++ " + fileNameWithFullPath;
用于CPP运行
String runFileCommand = "./" + fileNameWithFullPath.split(".cpp")[0];
我使用与编译java文件相同的代码,但它没有给出任何结果,而bri.readLine始终给出null
请帮助我解决这个问题,并请对我的应用程序提供任何建议。gcc和g++的默认输出文件名是a.out,而不是没有扩展名的输入文件名 请尝试runFileCommand=./a.out,或者在gcc/g++中使用-o选项来指定输出文件名
此外,在没有错误或警告的情况下,任何编译命令都不会输出任何内容。bri.readLine返回null,因为当Java文件编译没有错误时,不会将任何内容打印到标准输出。这就是问题所在吗?如果错误太多且缓冲区已满,编译器将停止,因为在程序完成之前,您不会读取错误,即出现死锁。我会将错误打印到System.err。