如何解决Maven Java GUI项目中的AWTUtilities报错问题
解决
com.sun.awt.AWTUtilities找不到的问题 这个问题我之前也碰到过,核心原因是你用了Sun/Oracle JDK的私有API——com.sun.awt.AWTUtilities不属于Java标准库,是JDK内部的非公开类,Java 7之后就被标记为废弃,Java 9更是直接移除了它。再加上Maven默认的编译规则会阻止访问这类私有接口,所以才会出现编译错误。
下面给你两种解决方案,优先推荐第一种标准API的方式,兼容性和稳定性都更好:
方案一:使用Java官方标准API实现圆角窗口(推荐,兼容Java 7+)
从Java 7开始,java.awt.Window类(JFrame的父类)已经原生支持setShape(Shape shape)方法,完全替代了AWTUtilities.setWindowShape的功能,不需要引入任何私有包。
修改代码只需两步:
- 删除多余的私有API导入:
import com.sun.awt.AWTUtilities; - 把调用私有API的代码替换成官方方法:
win.setShape(shape);
修改后的完整代码示例(还帮你把矩形改成了圆角矩形,更贴合你的需求):
import javax.swing.*; import java.awt.*; import java.awt.geom.RoundRectangle2D; public class Test extends JFrame{ private static Robot robot; public static void main(String[] args) { try { robot = new Robot(); } catch (AWTException e1) { e1.printStackTrace(); } JFrame win = new JFrame(); win.setSize(700, 100); JPanel panel = new JPanel(); JButton button = new JButton("simulate"); final JTextField textField = new JTextField(); textField.setPreferredSize(new Dimension(600, 30)); panel.add(textField); panel.add(button); win.add(panel); // 创建圆角矩形形状,最后两个参数是圆角的宽高 Shape shape = new RoundRectangle2D.Double(0, 0, win.getWidth(), win.getHeight(), 20, 20); // 使用Java官方标准API设置窗口形状 win.setShape(shape); // 如果需要透明背景配合圆角效果,可以添加这行 // win.setBackground(new Color(0, 0, 0, 0)); win.setVisible(true); } }
方案二:强制使用旧版私有API(仅兼容Java 8及更早的Oracle/Sun JDK)
如果因为特殊需求必须用AWTUtilities,只能在Java 8及以下的Oracle/Sun JDK中使用,同时需要修改Maven的编译配置,允许访问私有API:
在项目的pom.xml中添加编译插件的参数:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <!-- 必须指定为Java 8或更低版本 --> <target>1.8</target> <compilerArgs> <!-- 忽略JDK的符号文件,允许访问私有API --> <arg>-XDignore.symbol.file</arg> </compilerArgs> </configuration> </plugin> </plugins> </build>
⚠️ 强烈不推荐这个方案:
- 私有API没有兼容性保证,Java 9+完全无法使用
- 跨JDK厂商不兼容(比如OpenJDK可能没有这个类)
- 违反Java的API规范,后续项目升级或换环境会踩坑
内容的提问来源于stack exchange,提问作者A. Ab
相关产品推荐
相关产品推荐

