首先定义一个抽象类
public abstract class FirebugConsole extends OutputStream {
abstract void log( String msg );
StringBuilder sb = new StringBuilder();
@Override
public void write(int i) {
sb.append((char)i);
}
@Override
public void flush() {
if( sb.length() >0 && !sb.toString().equals("\r\n"))
log(sb.toString());
sb = new StringBuilder();
}
}
然后使用实现对JavaScript的本机调用的方法对其进行扩展。下面是如何编写日志消息的示例
public class FirebugConsoleInfo extends FirebugConsole{
@net.java.html.js.JavaScriptBody(args = { "msg" }, body = ""
+ "Firebug.Console.log(msg);")
public native void log( String msg );
}
最后,将system.out和system.err管道到这些对象
public static void onPageLoad() throws Exception {
...
System.setOut(new PrintStream(new FirebugConsoleInfo(), true));
System.setErr(new PrintStream(new FirebugConsoleError(), true));
...
}
public abstract static class FirebugConsole extends OutputStream {
protected final BrwsrCtx ctx;
public FirebugConsole( BrwsrCtx ctx ){
this.ctx = ctx;
}
abstract void logNative( String msg );
void log(String msg) {
ctx.execute(new Runnable(){
@Override
public void run() {
logNative(msg);
}
});
}
StringBuilder sb = new StringBuilder();
@Override
public void write(int i) {
sb.append((char)i);
}
@Override
public void flush() {
if( sb.length() >0 && !sb.toString().equals("\r\n"))
log(sb.toString());
sb = new StringBuilder();
}
}
public static class FirebugConsoleInfo extends FirebugConsole{
public FirebugConsoleInfo(BrwsrCtx ctx) {
super(ctx);
}
@net.java.html.js.JavaScriptBody(args = { "msg" }, body = ""
+ "Firebug.Console.log(msg);")
public native void logNative( String msg );
}
public static class FirebugConsoleError extends FirebugConsole{
public FirebugConsoleError(BrwsrCtx ctx) {
super(ctx);
}
@net.java.html.js.JavaScriptBody(args = { "msg" }, body = ""
+ "Firebug.Console.error(msg);")
public native void logNative( String msg );
}
}
public static void onPageLoad() throws Exception {
BrwsrCtx ctx = BrwsrCtx.findDefault(GoGPS_Fx.class);
System.setOut(new PrintStream(new FirebugConsoleInfo(ctx), true));
System.setErr(new PrintStream(new FirebugConsoleError(ctx), true));
}
问题内容: 我需要将System.out / err.println输出重定向到slf4j。 我知道这不是正确记录日志的方法, 但是有一个外部库记录到System.out 问题答案: 您可以使用sysout-over-slf4j。 sysout-over- slf4j模块允许用户将对System.out和System.err的所有调用重定向到SLF4J定义的记录器,该记录器的名称是在其中进行Sys
我想在日志文件中看到我的jnlp标准输出。请建议。p. s.我jnlp在windows下运行,使用log4j记录器
问题内容: 声明为。 但是你可以致电重新分配它。 ??如果是这样怎么可能? (和适用于) 更重要的是,如果你可以对public static final字段进行突变,那么就可以为你提供的保证(如果有)意味着什么?(我从未意识到,也没想到System.in/out/err表现为变量) 问题答案: 通常,最终的静态字段可能不会被修改。然而和是,由于遗留原因,必须允许通过方法来改变最终的静态字段和。我们
问题内容: 请参见下面的代码段 当我多次执行代码时,我会如下随机获得输出,有时System.out语句首先在控制台中打印,有时System.err首先打印。以下是我得到的随机输出 输出1 输出2 为什么会这样呢? 问题答案: 我相信这是因为您正在写入两个不同的输出(一个是标准输出,另一个是标准错误)。这些可能在运行时由两个不同的线程处理,以允许在Java执行期间同时写入两者。假设是这种情况,cpu
问题内容: 在阅读有关Java I / O的知识时,我意识到可以通过两种方式写入标准输出。 以下是同时使用这两种技术的代码段 相对于其他使用,是否有任何性能优势? 问题答案: 一个快速的Google透露了Coderanch上的一个线程很有用。 还有其他几种进行控制台编写的方法,但是除了编写更少的代码外,使用一种或另一种似乎没有真正的好处,而且创建新的PrintWriter对象最终会占用更多的内存。
如何通过Ajax调用将jsonArray发布到spring控制器?? 这是我的JSON数组想通过这个!!