новый WebView () вызывает «исключение java.lang.UnsupportedOperationException: не реализовано» - PullRequest
0 голосов
/ 24 декабря 2018

Я не могу создать новый 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 Ответ

0 голосов
/ 24 декабря 2018

Обновления:

Как уже упоминалось в комментариях, эта ошибка будет исправлена ​​в OpenJFX 12.


Вот код проблемы от 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 возвращает true для isLoggable(System.Logger.Level.FINE) во время создания PerfLogger.

В этом случае в результате этого процесса получается System.Logger с именем "com.sun.webkit.perf.Locks" создается.Это означает, что вы можете избежать UnsupportedOperationException, если сконфигурируете System.Logger так, чтобы ничего не регистрировалось на Level.FINE или «ниже».Это сделает PerfLogger «отключенным», что предотвратит вызов getName по линии.

Примечание. Это основано на исходном коде OpenJFX 11.0.1.Все упомянутое является подробностью реализации и может быть изменено без уведомления.

...