package com.tddinaction.concurrency.waitforthreads;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.PrintWriter;
public class ThrowableFromSpawnedThread extends Throwable {
private String threadName;
public ThrowableFromSpawnedThread(Thread thread, Throwable e) {
super(e);
this.threadName = thread.getName();
}
@Override
public String getMessage() {
return "[Occurred in thread '" + threadName + "'] "
+ getCause().getMessage();
}
@Override
public void printStackTrace() {
printStackTrace(System.err);
}
@Override
public void printStackTrace(PrintWriter s) {
// s.print("[in thread '" + threadName + "'] ");
getCause().printStackTrace(s);
}
@Override
public void printStackTrace(PrintStream s) {
printStackTrace(new PrintWriter(new OutputStreamWriter(s)));
}
public String getThreadName() {
return threadName;
}
}