【问题标题】:Swing Issue on Java 10Java 10 上的 Swing 问题
【发布时间】:2018-07-27 09:35:45
【问题描述】:

我目前正在尝试将我们的应用程序从 Java 8 迁移到 Java 10,几个月后将迁移到 Java 11。

我们有一个遗留系统,它使用了一些 API,我猜这些 API 已被删除或将被删除。我们正在使用 ant 脚本 (1.10.1) 进行应用程序编译。

以下是构建我们应用程序的相同部分:

  <target name="javac-setup" depends="flags, with.clover, jaxb-apply, flamingo.javac"/>

    <target name="javac" depends="javac-setup">
        <mkdir dir="${workmanager.dir.classes}"/>
        <javac destdir="${workmanager.dir.classes}" deprecation="on" debug="${javac.debug}" encoding="iso-8859-1" includeantruntime="false">
            <compilerarg line="-Xlint:static"/>
            <compilerarg line="-Xlint:unchecked"/>
            <compilerarg line="-Xlint:overrides"/>
            <compilerarg line="-Xmaxerrs 9999" />
            <compilerarg line="-Xmaxwarns 9999" />
            <compilerarg value="-Werror"/>
            <src path="${workmanager.dir.src}"/>
            <src path="${webservices.dir.java.src}"/>
            <patternset refid="java.sources"/>
            <classpath refid="classes.classpath"/>
        </javac>
    </target>

在编译过程中,在迁移到 Java 10 后,我遇到了一些与 Java Swing 相关的错误(同样是旧的,但必须忍受它)。由于我仍然不完全了解 Java 10 中发生的所有变化,因此我看起来这个问题与模块化概念有关。不确定虽然还在学习。我知道您的建议,以了解这些错误是否与模块化有关。还有解决这些问题的建议或提示吗?

以下是错误:

[javac] Compiling 3253 source files to C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\classes
    [javac] C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\src\com\osm\datamgmt\report\ui\AssignPosNumberToolbar.java:26: error: package com.sun.java.swing.plaf.windows is not visible
    [javac] import com.sun.java.swing.plaf.windows.WindowsButtonUI;
    [javac]                               ^
    [javac]   (package com.sun.java.swing.plaf.windows is declared in module java.desktop, which does not export it)
    [javac] C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\src\com\osm\datamgmt\report\ui\AssignPosNumberToolbar.java:27: error: package com.sun.java.swing.plaf.windows is not visible
    [javac] import com.sun.java.swing.plaf.windows.WindowsToolBarUI;
    [javac]                               ^
    [javac]   (package com.sun.java.swing.plaf.windows is declared in module java.desktop, which does not export it)
    [javac] C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\src\com\osm\ui\utils\WMClosableTabbedPane.java:33: error: package com.sun.java.swing.plaf.windows is not visible
    [javac] import com.sun.java.swing.plaf.windows.WindowsTabbedPaneUI;
    [javac]                               ^
    [javac]   (package com.sun.java.swing.plaf.windows is declared in module java.desktop, which does not export it)
    [javac] C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\src\com\osm\ui\MultiColumnComboBox.java:58: error: package com.sun.java.swing.plaf.motif is not visible
    [javac] import com.sun.java.swing.plaf.motif.MotifComboBoxUI;
    [javac]                               ^
    [javac]   (package com.sun.java.swing.plaf.motif is declared in module java.desktop, which does not export it)
    [javac] C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\src\com\osm\datamgmt\ui\SimplificationComboBox.java:31: error: package com.sun.java.swing.plaf.motif is not visible
    [javac] import com.sun.java.swing.plaf.motif.MotifComboBoxUI;
    [javac]                               ^
    [javac]   (package com.sun.java.swing.plaf.motif is declared in module java.desktop, which does not export it)
    [javac] C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\src\com\osm\ui\laf\xplookandfeel\XPComboBoxUI.java:21: error: package com.sun.java.swing.plaf.windows is not visible
    [javac] import com.sun.java.swing.plaf.windows.WindowsComboBoxUI;
    [javac]                               ^
    [javac]   (package com.sun.java.swing.plaf.windows is declared in module java.desktop, which does not export it)
    [javac] C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\src\com\osm\datamgmt\ui\favorites\FavoritesToolBar.java:28: error: package com.sun.java.swing.plaf.windows is not visible
    [javac] import com.sun.java.swing.plaf.windows.WindowsButtonUI;
    [javac]                               ^
    [javac]   (package com.sun.java.swing.plaf.windows is declared in module java.desktop, which does not export it)
    [javac] C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\src\com\osm\datamgmt\ui\favorites\FavoritesToolBar.java:29: error: package com.sun.java.swing.plaf.windows is not visible
    [javac] import com.sun.java.swing.plaf.windows.WindowsToolBarUI;
    [javac]                               ^
    [javac]   (package com.sun.java.swing.plaf.windows is declared in module java.desktop, which does not export it)
    [javac] C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\src\com\osm\ui\laf\ptc\PtcLaf.java:14: error: package com.sun.java.swing.plaf.windows is not visible
    [javac] import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
    [javac]                               ^
    [javac]   (package com.sun.java.swing.plaf.windows is declared in module java.desktop, which does not export it)
    [javac] C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\src\com\osm\ui\laf\ptc\PtcMenuUI.java:31: error: package com.sun.java.swing.plaf.windows is not visible
    [javac] import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
    [javac]                               ^
    [javac]   (package com.sun.java.swing.plaf.windows is declared in module java.desktop, which does not export it)
    [javac] C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\src\com\osm\ui\laf\ptc\PtcRadioButtonMenuItemUI.java:14: error: package com.sun.java.swing.plaf.windows is not visible
    [javac] import com.sun.java.swing.plaf.windows.WindowsIconFactory;
    [javac]                               ^
    [javac]   (package com.sun.java.swing.plaf.windows is declared in module java.desktop, which does not export it)
    [javac] C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\src\com\osm\ui\laf\ptc\PtcSeparatorUI.java:20: error: package com.sun.java.swing.plaf.windows is not visible
    [javac] import com.sun.java.swing.plaf.windows.WindowsSeparatorUI;
    [javac]                               ^
    [javac]   (package com.sun.java.swing.plaf.windows is declared in module java.desktop, which does not export it)
    [javac] C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\src\com\osm\ui\laf\xplookandfeel\XPButtonUI.java:26: error: package com.sun.java.swing.plaf.windows is not visible
    [javac] import com.sun.java.swing.plaf.windows.WindowsButtonUI;
    [javac]                               ^
    [javac]   (package com.sun.java.swing.plaf.windows is declared in module java.desktop, which does not export it)
    [javac] C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\src\com\osm\ui\laf\xplookandfeel\XPLookAndFeel.java:24: error: package com.sun.java.swing.plaf.windows is not visible
    [javac] import com.sun.java.swing.plaf.windows.WindowsIconFactory;
    [javac]                               ^
    [javac]   (package com.sun.java.swing.plaf.windows is declared in module java.desktop, which does not export it)
    [javac] C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\src\com\osm\ui\laf\xplookandfeel\XPLookAndFeel.java:25: error: package com.sun.java.swing.plaf.windows is not visible
    [javac] import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
    [javac]                               ^
    [javac]   (package com.sun.java.swing.plaf.windows is declared in module java.desktop, which does not export it)
    [javac] C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\src\com\osm\ui\laf\xplookandfeel\XPMenuUI.java:25: error: package com.sun.java.swing.plaf.windows is not visible
    [javac] import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
    [javac]                               ^
    [javac]   (package com.sun.java.swing.plaf.windows is declared in module java.desktop, which does not export it)
    [javac] C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\src\com\osm\ui\laf\xplookandfeel\XPRadioButtonMenuItemUI.java:14: error: package com.sun.java.swing.plaf.windows is not visible
    [javac] import com.sun.java.swing.plaf.windows.WindowsIconFactory;
    [javac]                               ^
    [javac]   (package com.sun.java.swing.plaf.windows is declared in module java.desktop, which does not export it)
    [javac] C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\src\com\osm\ui\laf\xplookandfeel\XPSeparatorUI.java:17: error: package com.sun.java.swing.plaf.windows is not visible
    [javac] import com.sun.java.swing.plaf.windows.WindowsSeparatorUI;
    [javac]                               ^
    [javac]   (package com.sun.java.swing.plaf.windows is declared in module java.desktop, which does not export it)
    [javac] C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\src\com\osm\ui\laf\xplookandfeel\XPToggleButtonUI.java:23: error: package com.sun.java.swing.plaf.windows is not visible
    [javac] import com.sun.java.swing.plaf.windows.WindowsToggleButtonUI;
    [javac]                               ^
    [javac]   (package com.sun.java.swing.plaf.windows is declared in module java.desktop, which does not export it)
    [javac] C:\WorkSpace\JAVA10\oswm\rel20.10_Patches\WorkManager\src\com\osm\ui\laf\xplookandfeel\XPToolBarUI.java:17: error: package com.sun.java.swing.plaf.windows is not visible
    [javac] import com.sun.java.swing.plaf.windows.WindowsToolBarUI;
    [javac]                               ^
    [javac]   (package com.sun.java.swing.plaf.windows is declared in module java.desktop, which does not export it)
    [javac] 20 errors 

【问题讨论】:

    标签: java swing ant compiler-errors java-10


    【解决方案1】:

    是的,这是由于模块系统。您是accessing internal APIs,JPMS 默认不允许您这样做。

    快速修复

    要快速解决此问题,请对消息中提到的每个包使用 the command line option --add-exports %module/%package=ALL-UNNAMED,例如:

    --add-exports java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED
    

    (不,没有通配符)您必须将这些添加到 Java 9+ 的构建命令中,并且在某些时候(可能是 Java 12+)也添加到您的执行命令中。

    正确修复

    如前所述,这只是一个快速修复。有了模块系统,JDK 团队可能会更积极地重构您正在使用的 API 等内部结构,因此您将来很可能会遇到更改或删除类的问题。

    正确的解决方法是删除您对这些内部结构的依赖。第一步是检查您在那里使用的功能是否可能同时获得了标准化的 API。

    【讨论】:

    • 我自己从未使用过 Ant,但您的脚本包含 &lt;compilerarg line="-Xlint:overrides"/&gt; 之类的东西,所以我猜 &lt;compilerarg line="--add-exports java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED"/&gt; 可以工作。如果没有,请将空格替换为另一个 =。如果这也不起作用,我没有想法。 ?
    • 感谢您的建议有效。最终获得了一组新的已弃用的 api。无论如何谢谢..
    • 我有一个类似 Enumeration breadthFirstEnumeration() 的代码,其中 WMTreeNode 类是 DefaultMutableTreeNode 的子类。但是在 java 10 中,WMTreeNode 不能覆盖 DefaultMutableTreeNode [javac] public Enumeration breadthFirstEnumeration() 中的 breadthFirstEnumeration() 。我认为这与模块化无关,我尝试过同样的方法。有什么建议吗?
    • 最准确的问题是:错误:方法没有覆盖或实现超类型中的方法
    • 这是一个不同的问题,请提出一个新问题。
    猜你喜欢
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多