2016-09-19 3 views
3

JavaアプリケーションのNashornスクリプトを使用します。 Javaはコンテキスト(errorWriterを含む)を設定し、すべて正常に動作します... しかし、エラーストリームに書き込む方法は見つかりませんでした。誰か知っていますか ?Nashornのエラーストリームに書き込む方法は?

私はエラーをスローしようとしましたが、エラー出力StreamではなくscriptExceptionに出力しました。

ありがとうございます。

答えて

1

It looks likestdoutprint)に書き込むように、stderrに書き込む機能はありません。

しかし、エラーライターに書き込む機能を持つScriptContextに属性を設定することができます。

ScriptEngine se = ...; 

ScriptContext sc = se.getContext(); 
sc.setAttribute("stderr", // name is 'stderr' 
    (Consumer<String>) str -> { // Object is a Consumer<String> 
     try { 
      Writer err = sc.getErrorWriter(); 
      err.write(str); 
      err.flush(); 
     } catch (Exception e) { 
      throw new Error(e); 
     } 
    }, 
    ScriptContext.ENGINE_SCOPE // i.e. don't share with other engines 
); 

、このようにそれを行う理由は、代わりに直接エラーライターオブジェクトを結合させる、あなたはまだ、後でエラーライターを変更することができ、そしてそれはまだ動作することです。

その後、あなたがこれを行うことができます:(ところでデフォルトではありません)は、Java stderrにすべてのエラーを書き込みます

sc.setErrorWriter(new PrintWriter(new OutputStream() {   
    @Override 
    public void write(int b) throws IOException { 
     System.err.write(b);     
    } 
})); 

を。あなたが行うことができますJavaScriptから次に

var error = function(message) { // A nice wrapper function 
    stderr.accept(message); // 'accept', since we passed a `Consumer<...>` 
}; 

error('error'); // Will now print to Java's stderr 
+0

明確な回答、ありがとう – xaevus

関連する問題