Новый WebView() вызывает "исключение java.lang.UnsupportedOperationException: не реализовано"
Я не могу создать новый WebView программно. Просто звоню new WebView()
вызывает следующее исключение:
java.lang.ExceptionInInitializerError
at javafx.web/javafx.scene.web.WebEngine.<clinit>(WebEngine.java:339)
at javafx.web/javafx.scene.web.WebView.<init>(WebView.java:260)
// omitting unrelated stacktraces
at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventFilterRecord.handleCapturingEvent(CompositeEventHandler.java:282)
at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchCapturingEvent(CompositeEventHandler.java:98)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchCapturingEvent(EventHandlerManager.java:223)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchCapturingEvent(EventHandlerManager.java:180)
at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchCapturingEvent(CompositeEventDispatcher.java:43)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:52)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
at javafx.graphics/javafx.scene.Scene$KeyHandler.process(Scene.java:4058)
at javafx.graphics/javafx.scene.Scene$KeyHandler.access$1500(Scene.java:4004)
at javafx.graphics/javafx.scene.Scene.processKeyEvent(Scene.java:2121)
at javafx.graphics/javafx.scene.Scene$ScenePeerListener.keyEvent(Scene.java:2595)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:217)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:149)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleKeyEvent$1(GlassViewEventHandler.java:248)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:390)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleKeyEvent(GlassViewEventHandler.java:247)
at javafx.graphics/com.sun.glass.ui.View.handleKeyEvent(View.java:547)
at javafx.graphics/com.sun.glass.ui.View.notifyKey(View.java:971)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.UnsupportedOperationException: not implemented
at javafx.base/com.sun.javafx.logging.PlatformLogger.getName(PlatformLogger.java:121)
at javafx.web/com.sun.webkit.perf.PerfLogger.fullName(PerfLogger.java:155)
at javafx.web/com.sun.webkit.perf.PerfLogger.registerProbe(PerfLogger.java:201)
at javafx.web/com.sun.webkit.perf.PerfLogger.startCount(PerfLogger.java:227)
at javafx.web/com.sun.webkit.perf.PerfLogger.<init>(PerfLogger.java:90)
at javafx.web/com.sun.webkit.perf.PerfLogger.getLogger(PerfLogger.java:57)
at javafx.web/com.sun.webkit.perf.PerfLogger.getLogger(PerfLogger.java:84)
at javafx.web/com.sun.webkit.Invoker.<clinit>(Invoker.java:34)
... 37 more
Это ошибка? Я использую OpenJFX 11.0.1 и OpenJDK 11.0.1.
1 ответ
Обновления:
Как уже упоминалось в комментариях, эта ошибка будет исправлена в OpenJFX 12.
- GitHub Issue # 334 (предоставлено опрашивающим)
- GitHub Pull Request # 343
- JBS Issue JDK-8216470
Вот код проблемы от com.sun.javafx.logging.PlatformLogger
:
@Override
public String getName() {
throw new UnsupportedOperationException("not implemented");
}
Как видите, он ничего не делает, кроме как выдает наблюдаемое исключение. Это верно для всех "реализованных" java.lang.System.Logger
методы.
Если вы будете следовать коду, как указано в приведенной вами трассировке стека, getName
Метод вызывается в конечном итоге, потому что com.sun.webkit.perf.PerfLogger
создается в процессе инициализации WebEngine
и, соответственно, com.sun.webkit.Invoker
классы. Тем не мение, getName
вызывается только когда PerfLogger
включен.
С беглого взгляда, PerfLogger
оборачивает com.sun.javafx.logging.PlatformLogger
который сам оборачивает System.Logger
, PerfLogger
включен, если System.Logger
возвращает истину для isLoggable(System.Logger.Level.FINE)
в то время PerfLogger
построен
В этом случае этот процесс приводит к System.Logger
с именем "com.sun.webkit.perf.Locks"
создается Это означает, что вы можете избежать UnsupportedOperationException
если вы настроите это System.Logger
ничего не регистрировать на Level.FINE
или "ниже". Это сделает PerfLogger
"отключен", который предотвращает getName
от вызова по линии.
Примечание. Это основано на исходном коде OpenJFX 11.0.1. Все упомянутое является деталью реализации и может быть изменено без уведомления.