Java Swing组件无法解析

11

我从教程中获取了以下代码:

import javax.swing.*;
import java.util.Date;

public class SwingGUI {

    public static void main( String[] args )
      {
        JFrame f = new JFrame( "test" );
        f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        f.setSize( 1500, 900 );
        JLabel l = new JLabel( String.format( "%tT", new Date() ) );
        f.add(l);
        f.setVisible( true );
      }
}

代码中出现了f.add(l);,并且显示了两个错误:

  • 类型Container中的方法add(Component)对于参数(JLabel)不适用

  • 类型javax.swing.JComponent无法解析。它是从所需的.class文件中间接引用的

作为相对新手的Java开发者,我不太理解Eclipse试图告诉我什么。我该怎么做才能让代码正常运行?

编辑:如果删除f.add(l);这一行,代码可以运行,因此问题不在于JFrame或JLabel未被找到。我尝试了一些调整后消除了第一个错误,但第二个错误仍然存在。由于组件被间接引用,所以无法解析该组件的类型。这是什么意思呢?


2
项目-->清理...? - Guillaume Polet
清理并没有起作用。我建立了一个新项目,选择了jre1.8.0_31,创建了新的包和类,但我仍然收到错误信息。 - Ludwitch
1
尝试删除Java Swing的导入,然后在Eclipse中使用Control-Shift-O来查找JFrame类并导入它。错误消息似乎表明它找不到JFrame;也许你从示例中复制了上面的内容而不是你的类,并且有拼写错误。如果Eclipse找不到任何内容,则意味着Swing库在此Eclipse项目中无法使用。 - arcy
我尝试了ctrl-shift-o,但没有帮助。问题不在于JFrame或JLabel本身。代码在没有“f.add(l);”的情况下运行。 - Ludwitch
@arcy 我在我的 Mac 上尝试了" command+shift+O",它起作用了,感谢你的帮助。我已经折腾了一个小时了! - David Warshawsky
9个回答

9

在Eclipse中将系统库下的执行环境更新为JavaSE-1.7或JavaSE-1.8即可解决问题。按照以下步骤进行更新:

> Right-click on the project
> Select properties
> Java build path
> Library > Add Library > Add JRE SYSTEM Library
> Execution Environment
> Select JavaSE-1.7 or JavaSE-1.8
> Finish

5

显然问题不在代码上,因为代码对其他人有效。所以我决定删除并重新安装Java和Eclipse,结果它工作了!感谢您们所有人的反馈。


4

我遇到了同样的问题,并发现我的项目正在使用Java 8库。

我安装了Java 7库,将其添加到项目属性中,并从已安装的C:\Program Files\Java文件夹引用该库,错误就消失了。

看起来,新的Java 8版本可能有不同的解决swing组件的方法。


我正在使用jdk1.7.0_55,但是在Mac Eclipse中出现了相同的错误:“无法将MainFrame(扩展JFrame)转换为JComponent”。 - karim
由于某种奇怪的原因,将我的项目类路径JDK从Java 8降级到Java 7就解决了问题!尽管我尝试过包括8、11、15在内的所有较新的JDK中都可以使用JToolBar类。 - Teddy

3

只是猜测,但它符合您描述的问题:

当您自己的包含一个名为JLabel的类时,就会出现这个问题。本地类将覆盖从javax.swing包导入的JLabel类,可能没有与原始类相同的类层次结构。

总之,给自己的类命名与现有JDK类相同通常是一个不好的想法。


很遗憾,对我来说并非如此。这里没有本地类,只有javax.swing.JLabel。 - Ludwitch
当您在代码中悬停在 JLabel 上时,Eclipse 会显示什么? - piet.t
分别取决于我悬停的JLabel,javax.swing.JLabel和javax.swing.JLabel.JLabel(String arg0)。此外,在这两种情况下,它都显示“注意:此元素既没有附加源,也没有附加Javadoc,因此找不到Javadoc”。 - Ludwitch

2
我也遇到了这个问题。不幸的是,要解决它,我需要安装我的eclipse。但我认为问题在于Eclipse中JRE和Java版本之间的不兼容。 我的项目(以及我的Eclipse Indigo)只支持JRE支持的JAVA8,无法升级到JAVA8。更新到另一个可以支持Java 8的eclipse版本即可解决问题。

1

我是新来的。我遇到了这个问题,研究了两天。我通过向我的Eclipse添加一个包含所有必需组件的外部JAR文件来解决它。右键单击项目>>构建路径>>配置构建路径>>添加外部JARS并浏览计算机上的JAR文件。可以在此处下载JAR文件http://www.java2s.com/Code/Jar/j/Downloadjsdgstubsjre15jar.htm。希望这能帮助到某些人。


1
  1. Eclipse中必须安装(并选择)JDK:

    窗口 > 首选项 > Java > 已安装的JREs

  2. 项目必须配置为使用该JDK:

    项目 > 属性 > Java Build Path > 库

  3. 列表中应有类似于“JRE System Library [JDK7]” 的条目。如果没有,请按以下步骤:

    添加库... > JRE 系统库

  4. 项目应创建为“Java 项目”:

    项目 > 属性 > 构建器

    应包括“Java 构建器”

SoCodeIt IDE Dr


1

问题不在代码中。

这是由于项目的JRE配置错误导致的。 可能是由于项目的JRE与工作区的JRE之间的差异。

可以通过更新Eclipse或JRE来解决...

但从我的角度来看,我建议您这样做。

转到窗口-->首选项-->Java-->已安装的JRE-->执行环境-->选择项目的JRE并勾选完全匹配的已安装JRE。

如果没有匹配的JRE,请下载并添加到已安装的JRE中使用添加按钮。

最后,重新启动您的Eclipse IDE。 这对我很有效...

如果不起作用,请更新Eclipse


0

我在使用Eclipse IDE时也遇到了同样的问题,但是在将jar文件更改为jre7(右键单击项目>>Buildpath>>Configure build path>>Add Library>>Jre System Library)后,错误得到了解决。我不知道这是如何发生的,有人能解释一下吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接