我正在开发一个Java项目,并且因为它没有显示任何结果而停留在一个步骤。
java代码是:
public class callPgs {
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
Process p = Runtime.getRuntime().exec("C:/R/R-3.2.0/bin/Rscript.exe C:/R/R-3.2.0/bin/arrayqualityMetrics.R");
int processComplete = p.waitFor();
if (processComplete == 0) {
JOptionPane.showMessageDialog(null,"Process is completed");
System.out.println("successfull");
} else {
JOptionPane.showMessageDialog(null,"You Have selected Wrong Input File");
System.out.println("Could not complete");
}
}
catch (Exception e1)
{
e1.printStackTrace();
}
}
}
因为我使用Rscript.exe
使用命令提示符执行此操作 C:\R\...\bin\Rscript "arrayqualityMetrics.R"
我正确地得到了我的结果 但是当我使用上面的代码通过Java netbeans进行它时,它在netbean的控制台中显示了“无法完成”的else选项。
由于其他RScripts运行良好且没有任何错误但是这个没有给出结果,因为Rscript是针对arrayqualityMetrics的: -
库(arrayQualityMetrics)
库(LIMMA)
库(tcltk)
options(warn = -1)#commands用于在从R控制台运行Rscript时删除警告。
X< -tk_choose.files(caption =“选择文件”)
maData< -read.maimages(X,source =“agilent”,other.columns =“gProcessedSignal”,green.only = TRUE)
eSet< -new(“ExpressionSet”,exprs = maData $ other $ gProcessedSignal,annotation = maData $ genes [,7])
arrayQualityMetrics(eSet,outdir =“QC_C”,force = TRUE,do.logtransform = TRUE)
所以我想问天气Rscript中有任何错误,或者我应该在java代码中添加任何正确运行它的东西.... 任何帮助都很明显......
答案 0 :(得分:2)
除非您连接到进程输入流,否则您将无法捕获它。
见
http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html#getInputStream()
,如
InputStream os = p.getInputStream ();
while ((b = os.read ()) != -1) {
System.out.print (b);
}
答案 1 :(得分:1)
您需要waitFor
Process
才能完成。根据Javadoc,导致当前线程在必要时等待,直到此Process
对象表示的进程终止。此外,您可能希望为此添加一个catch可能InterruptedException
。所以,像
try {
Process p = Runtime.getRuntime().exec(
"C:/R/R-3.2.0/bin/Rscript.exe my_script.R");
p.waitFor();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
答案 2 :(得分:1)
你可以这样做:
try{
Process p = Runtime.getRuntime().exec("C:\\R\\R-3.2.0\\bin\\Rscript.exe C:\\dir\my_script.R");
int processComplete = p.waitFor();
if (processComplete == 0) {
System.out.println("successfull");
} else {
System.out.println("Could not complete");
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
尝试添加需要执行的文件的完整路径。 我尝试过这个简单的例子,对我来说很好。
Process process = Runtime.getRuntime().exec("notepad C:\\abc.txt");