You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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的功能,不需要引入任何私有包。

修改代码只需两步:

  1. 删除多余的私有API导入:import com.sun.awt.AWTUtilities;
  2. 把调用私有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:37:51