• R/O
  • SSH
  • HTTPS

util: コミット


コミットメタ情報

リビジョン221 (tree)
日時2020-07-13 13:43:14
作者hirukawa_ryo

ログメッセージ

* fx-util 0.3.7
Asyncで発生した検査例外を強制スローする方法をやめて、AsyncWrappedExceptionでラップしてスローする処理に戻しました。
JavaFXの非同期タスクで検査例外をそのままスローしてもPrivilegedActionExceptionでラップされたままになりあまり意味がないためです。
また、スレッドのUncaughtExceptionHandlerを確認してUncaughtExceptionHandlerが設定されている場合は直接 uncaughtExceptionを呼ぶようにしました。
この場合は、AsyncWrappedExceptionでラップされていない元の検査例外をuncaughtExceptionメソッドが受け取ります。
なお、Silent~で発生した例外はthrows句なしで検査例外のままスローする方法のままです。

変更サマリ

差分

--- fx-util/trunk/src/main/java/net/osdn/util/javafx/concurrent/Async.java (revision 220)
+++ fx-util/trunk/src/main/java/net/osdn/util/javafx/concurrent/Async.java (revision 221)
@@ -168,7 +168,12 @@
168168 }
169169 }
170170 if(exception != null) {
171- rethrow(exception);
171+ Thread.UncaughtExceptionHandler ueh = Thread.currentThread().getUncaughtExceptionHandler();
172+ if(ueh != null) {
173+ ueh.uncaughtException(Thread.currentThread(), exception);
174+ } else {
175+ throw new AsyncWrappedException(exception);
176+ }
172177 }
173178 }
174179 }
@@ -194,7 +199,12 @@
194199 }
195200 }
196201 if(exception != null) {
197- rethrow(exception);
202+ Thread.UncaughtExceptionHandler ueh = Thread.currentThread().getUncaughtExceptionHandler();
203+ if(ueh != null) {
204+ ueh.uncaughtException(Thread.currentThread(), exception);
205+ } else {
206+ throw new AsyncWrappedException(exception);
207+ }
198208 }
199209 }
200210 }
@@ -224,7 +234,12 @@
224234 }
225235 }
226236 if(exception != null) {
227- rethrow(exception);
237+ Thread.UncaughtExceptionHandler ueh = Thread.currentThread().getUncaughtExceptionHandler();
238+ if(ueh != null) {
239+ ueh.uncaughtException(Thread.currentThread(), exception);
240+ } else {
241+ throw new AsyncWrappedException(exception);
242+ }
228243 }
229244 }
230245 }
@@ -317,13 +332,4 @@
317332 public interface Complete {
318333 void onCompleted(State state) throws Exception;
319334 }
320-
321- static void rethrow(Throwable throwable) {
322- rethrow0(throwable);
323- }
324-
325- @SuppressWarnings("unchecked")
326- static <T extends Throwable> void rethrow0(Throwable throwable) throws T {
327- throw (T)throwable;
328- }
329335 }
--- fx-util/trunk/src/main/java/net/osdn/util/javafx/concurrent/AsyncWrappedException.java (nonexistent)
+++ fx-util/trunk/src/main/java/net/osdn/util/javafx/concurrent/AsyncWrappedException.java (revision 221)
@@ -0,0 +1,8 @@
1+package net.osdn.util.javafx.concurrent;
2+
3+@SuppressWarnings("serial")
4+public class AsyncWrappedException extends RuntimeException {
5+ public AsyncWrappedException(Exception cause) {
6+ super(cause);
7+ }
8+}
旧リポジトリブラウザで表示