デバッガーで Java の例外を見ると、原因がそれ自体に無限に再帰的であることがよくわかります (無限だと思います)。
例えば:
Exception1,
Caused by -> Exception2
Caused by -> Exception2
Caused by -> Exception2
どうしてこれなの?
注: これは、デバッガー (この場合は Eclipse) でコードを見た場合です。
187 /**
188 * The throwable that caused this throwable to get thrown, or null if this
189 * throwable was not caused by another throwable, or if the causative
190 * throwable is unknown. If this field is equal to this throwable itself,
191 * it indicates that the cause of this throwable has not yet been
192 * initialized.
193 *
194 * @serial
195 * @since 1.4
196 */
197 private Throwable cause = this;
したがって、あなたが見ているのは、原因をとるコンストラクターの1つを使用せずに作成された例外だと思います。
これはデバッガーで確認できますが、getCauseは再帰参照を返さないように処理します。
414 public synchronized Throwable getCause() {
415 return (cause==this ? null : cause);
416 }