2016-11-10 128 views
0

我得到這個錯誤,我不知道該怎麼做,也找不到在這個網站上的任何其他解決方案。我在計算機的後臺運行Rserve,並連接到本地主機。但我不能讓框架彈出。
這裏是我的代碼:用java編寫Rserve。評估失敗錯誤127

package rservedemo; 

/** 
* 
* @author Carl 
*/ 
import java.awt.*; 

import java.awt.event.*; 
import org.rosuda.REngine.*; 
import org.rosuda.REngine.Rserve.*; 

public class PlotDemo extends Canvas { 


public static void main(String[] args) { 

try 
{ 
    String device = "jpeg"; 
    RConnection c = new RConnection ((args.length>0)?args[0]:"127.0.0.1"); 
    if 
      (c.parseAndEval("supressWarnings(require('Cairo',quietly=TRUE))").asInteger()>0) device="CarioJPEG"; 

    else 
     System.out.println("(Consider installing Cairo package for better bitmap output)"); 

     REXP xp = c.parseAndEval("Try("+device+"('test.jpg,quality=90))"); 
     if (xp.inherits("Try error")) 
     { 
      System.err.println("Can't open "+device+" graphics device:\n" +xp.asString()); 

     REXP w = c.eval("If (exists('last.warning') && length(last.warning)>0)names(last.warning) [1] else 0"); 
     if (w.isString()) System.err.println(w.asString()); 
     return; 
     } 
     c.parseAndEval("data(iris); plot(iris$Sepal.Length, iris$Petal.Length); dev.off()"); 

     xp = c.parseAndEval("r=readBin('test.jpg','raw',1024*1024); unlink('test.jpg');r"); 

     Image img = Toolkit.getDefaultToolkit().createImage(xp.asBytes()); 
     Frame f = new Frame("Test image"); 
     f.add(new PlotDemo (img)); 

     f.addWindowListener(new WindowAdapter(){ 
      public void windowClosing(WindowEvent e){System.exit(0);} 

     }); 
     f.pack(); 
     f.setVisible(true); 
     c.close(); 

} 
catch (RserveException rse) 
     { 
      System.out.println(rse); 
     } 
    catch (REXPMismatchException mme) 
    { 
     System.out.println(mme); 
     mme.printStackTrace(); 
    } 
catch (Exception e) 

{ 
    System.out.println("Seomthing went wrong, but it's not Rserve: " +e.getMessage()); 
    e.printStackTrace(); 
} 

    } 
    Image img; 
    public PlotDemo(Image img) 
    { 
     this.img=img; 
     MediaTracker mediaTracker = new MediaTracker(this); 
     mediaTracker.addImage(img, 0); 
     try 
     { 
      mediaTracker.waitForID(0); 
     } 
     catch (InterruptedException ie) 
     { 
      System.err.println(ie); 
      System.exit(1); 
     } 
     setSize(img.getWidth(null), img.getHeight(null));  
    } 
    public void paint (Graphics g) 
    { 
     g.drawImage(img, 0, 0, null); 
    } 
} 

這裏是錯誤的,我曾試圖改變線在27,但不可能做任何有用的事情。當我運行

c.parseAndEval("data(iris); plot(iris$Sepal.Length, iris$Petal.Length); dev.off()"); 

在r和那裏它的工作。所以這似乎是劑量問題。

Seomthing went wrong, but it's not Rserve: eval failed, request status: error code: 127 
org.rosuda.REngine.REngineException: eval failed, request status: error code: 127 
    at org.rosuda.REngine.Rserve.RConnection.parseAndEval(RConnection.java:454) 
    at org.rosuda.REngine.REngine.parseAndEval(REngine.java:108) 
    at rservedemo.PlotDemo.main(PlotDemo.java:27) 

感謝幫助

回答

0

通常進程退出代碼127意味着File not found。 在您區分問題可以行:

REXP xp = c.parseAndEval("Try("+device+"('test.jpg,quality=90))"); 

,因爲你可以有排隊的錯誤(錯誤):注

(c.parseAndEval("supressWarnings(require('Cairo',quietly=TRUE))").asInteger()>0) device="CarioJPEG"; 

:中CarioJPEG代替CairoJPEG

+0

和 「supressWarnings」 看上去錯誤太多。這不是你拼寫壓制的方式! –