从java netbeans

时间:2015-06-04 03:55:12

标签: java r cmd netbeans-8

我正在开发一个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代码中添加任何正确运行它的东西.... 任何帮助都很明显......

3 个答案:

答案 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");