为什么Oracle SQL Developer在Mac OS上启动时会出现空指针异常

Rya*_*anS 6 java oracle oracle-sqldeveloper

启动全新安装的Oracle SQL Developer时,图标在扩展坞中弹起,然后消失。

当我通过CLI启动它时,出现此错误:

Oracle SQL Developer
 Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.

java.lang.IllegalStateException: Problem creating splash screen on ETD.
    at oracle.ide.osgi.boot.SplashScreenImpl.SynchronizeWithEdt(SplashScreenImpl.java:541)
    at oracle.ide.osgi.boot.api.SplashScreen.createInstance(SplashScreen.java:66)
    at oracle.ide.osgi.boot.OracleIdeLauncher.showSplashScreen(OracleIdeLauncher.java:828)
    at oracle.ide.osgi.boot.OracleIdeLauncher.main(OracleIdeLauncher.java:109)
Caused by: java.lang.reflect.InvocationTargetException
    at java.desktop/java.awt.EventQueue.invokeAndWait(EventQueue.java:1328)
    at java.desktop/java.awt.EventQueue.invokeAndWait(EventQueue.java:1303)
    at java.desktop/javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1475)
    at oracle.ide.osgi.boot.SplashScreenImpl.SynchronizeWithEdt(SplashScreenImpl.java:537)
    ... 3 more
Caused by: java.lang.NullPointerException
    at java.desktop/java.awt.Window.init(Window.java:495)
    at java.desktop/java.awt.Window.<init>(Window.java:535)
    at java.desktop/java.awt.Frame.<init>(Frame.java:423)
    at java.desktop/java.awt.Frame.<init>(Frame.java:388)
    at java.desktop/javax.swing.JFrame.<init>(JFrame.java:180)
    at oracle.ide.osgi.boot.OracleIdeLauncher$2.getHiddenWindow(OracleIdeLauncher.java:807)
    at oracle.ide.osgi.boot.api.SplashScreen$1.run(SplashScreen.java:61)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:303)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:764)
    at java.desktop/java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:717)
    at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:711)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:89)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:734)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:199)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
A fatal error in the IDE boostraping code. Exiting ...
Run Code Online (Sandbox Code Playgroud)

我已经尝试验证JDK版本正确,并且没有其他丢失的依赖项。是什么导致此错误?

编辑:

当前使用DisplayLink驱动程序通过微型显示器端口通过Dell D6000扩展坞连接

MacBook Pro(15英寸,2017年),High Sierra v10.13.3,DisplayLinkDriver v4.0.0(85514)

$ java -version
java version "9.0.4"
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)
Run Code Online (Sandbox Code Playgroud)

Rya*_*anS 11

拔掉头发后,一位同事发现了原因:我正在使用多台显示器。

原来,初始屏幕正试图显示在主监视器上,但由于某种原因而无法显示。拆开多余的显示器可以解决此问题,并允许我启动该应用程序。启动后,我插入显示器并将窗口拖到它们上,没问题。

TLDR:将主显示器设置为Macbook屏幕或使用一台显示器启动

您可以通过使用Spotlight搜索来更改主监视器displays,然后将白条拖到实际的计算机显示(在我的情况下为macbook屏幕)。

  • 也可以使用 displaylink 驱动程序确认其中断 (3认同)
  • 在问题中添加了更多详细信息,我们怀疑是导致问题的原因是DisplayLink驱动程序 (2认同)
  • 我可以确认这是一个问题。与 displaylink 驱动程序相同的底座。如果我在没有扩展坞的情况下启动 sqldeveloper 我很好。我很高兴我找到了这个,我也在撕我的头发...... (2认同)
  • 此错误已被 OpenJDK 标记:https://bugs.openjdk.java.net/browse/JDK-8223158 我注意到他们已将此标记为已解决 11.0.7 +。因此,在 MacOS Catalina 上解决此错误的一种方法是从此处安装最新的 OpenJDK11(或至少比标记为 11.0.7 的版本更新):https://adoptopenjdk.net/nightly.html?variant=openjdk11&amp;jvmVariant=hotspot正在为我处理 Catalina,无需打开翻盖即可启动应用程序,这比我的解决方法要好得多。 (2认同)