JavaアプリケーションのNashornスクリプトを使用します。 Javaはコンテキスト(errorWriterを含む)を設定し、すべて正常に動作します... しかし、エラーストリームに書き込む方法は見つかりませんでした。誰か知っていますか ?Nashornのエラーストリームに書き込む方法は?
私はエラーをスローしようとしましたが、エラー出力StreamではなくscriptExceptionに出力しました。
ありがとうございます。
JavaアプリケーションのNashornスクリプトを使用します。 Javaはコンテキスト(errorWriterを含む)を設定し、すべて正常に動作します... しかし、エラーストリームに書き込む方法は見つかりませんでした。誰か知っていますか ?Nashornのエラーストリームに書き込む方法は?
私はエラーをスローしようとしましたが、エラー出力StreamではなくscriptExceptionに出力しました。
ありがとうございます。
It looks likestdout
(print
)に書き込むように、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
明確な回答、ありがとう – xaevus