【问题标题】:Eclipse HelloWorldSWT tutorial : cannot access import packagesEclipse HelloWorldSWT 教程:无法访问导入包
【发布时间】:2020-01-04 07:22:47
【问题描述】:

我最近安装了 Eclipse 用于在线 Java 课程,并且正在试用教程。

Hello World 教程不起作用,但我能够在 Stack Overflow 上的帮助下运行程序

Hello World SWT 教程也不起作用。我能够大致按照说明进行操作,但我不知道如何运行该程序,我怀疑它不会编译。

代码如下:

import jdk.internal.org.jline.utils.Display;

import jdk.nashorn.tools.Shell;

public class HelloWorldSWT {

    Display display = new Display();

    Shell shell = new Shell(display);

    shell.setText("Hello World!");

    shell.open();

    while(!shell.isDisposed()) {

    if (!display.readAndDispatch()) display.sleep(); 
} 
display.dispose();
}

在大多数行的左侧,Eclipse 显示一个红色的 x,我怀疑这表示编译错误。悬停在顶部 x 上时提供的 cmets 表示它无法访问这些导入,例如

“类型 jdk.internal.org.jline.utils.Display 不可访问”

将鼠标悬停在该包上会使有关“快速修复”的 cmets 出现,这表明该包中缺少 Display 类。

然后我尝试做一些不同的事情。我删除了该项目,并在以下步骤中添加了名为 Classpath i.s.o 的“项目”。模块路径。 (教程告诉添加 org.eclipse.swt.{platform}.{os}。 {arch} 项目,但我不知道该怎么做。)我还添加了 main 方法,我之前忘记了。现在只有 4 个 x,我可以给出一个运行命令,除其他外,它会在控制台中产生以下输出:

启动层初始化时出错 java.lang.module.FindException:读取模块时出错:C:\Users\Frank Tavernier\Documents\School\eclipse-workspace\HelloWorldSWT\bin 引起 通过:java.lang.module.InvalidModuleDescriptorException: 在顶级目录中找到 HelloWorldSWT.class(未命名的包不是 允许在模块中)

此外,Eclipse 仍然对导入有同样的抱怨。

如何说服 Eclipse 运行该程序?


01/09/2019:编辑问题?这似乎是一种继续讨论的糟糕方式。就是这样:

感谢您的帮助。

我已经添加了一个 main 方法。

我的印象是 Eclipse 会告诉用户他需要导入哪些包。看来我误会了。

我导入了正确的包,但还是不行。

greg-449:“请注意,您必须在项目类路径中具有适当的 SWT jar。”
如何说服 Eclipse 把它放在那里? 在包资源管理器中有一个项目,其中包含一个名为 swt.jar 的项目。

Greg-449:“您似乎还创建了设置为使用模块的 Java 项目(Java 9 及更高版本中的新功能)。要不使用模块,请取消选择 New Java Project 向导第二页上的“create module-info.java”选项。”
我怎样才能到达那个页面?如果我在向导中输入我的项目名称,完成按钮仍然是灰色的。似乎需要一个不同的名称,这表明向导会创建一个新项目,并且这些设置不会影响我现有的项目。

我尝试用新获得的知识再次学习本教程。我没有它的链接。它带有 Eclipse。

在某一时刻,甚至在创建项目之前,教程说:“从主菜单通过文件 > 导入...打开导入向导,然后选择插件开发 > 插件和片段。点击下一步 。”
我没有这样做,因为我找不到“插件开发”。但是,本教程的这一步有一个“点击执行”链接,所以我点击了它。这会创建一个名为“出现问题”的对话框,并显示消息:“命令未成功完成”。详细信息:“未知向导:org.eclipse.pde.ui.PluginImportWizard。” 所以我跳过了这一步。

在新建 Java 项目中,我偏离了教程,取消了“创建 module-info.java 文件”的选择。

教程还说:“由于我们的项目需要 SWT,我们需要在项目属性中指定它。”
我不知道该怎么做,所以我跳过了这一步。

我粘贴了代码,导入了正确的包 i.s.o。 Eclipse 建议的那些。 Eclipse 找不到那些“正确”的包。 (它可以在之前(在原始项目中)找到它们,但是创建这个新项目由于某种原因改变了它。)

代码是: 导入 org.eclipse.swt.widgets.Display; 导入 org.eclipse.swt.widgets.Shell;

public class HelloWorldSWT {
    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setText("Hello world!");
        shell.open();
        while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) display.sleep();
        }
        display.dispose();
    }
}

当我运行程序时,它会打印在命令窗口中:

线程“main”java.lang.Error 中的异常:未解决的编译问题: 显示无法解析为类型 显示无法解析为类型 Shell 无法解析为类型 Shell 无法解析为类型

在 HelloWorldSWT.main(HelloWorldSWT.java:7)

【问题讨论】:

  • 没有人知道如何使 Eclipse 教程正常工作吗?

标签: java eclipse import


【解决方案1】:

您正在导入错误的类。 SWT 类都有org.eclipse.swt 作为包名的第一部分。

Displayorg.eclipse.swt.widgets.DisplayShellorg.eclipse.swt.widgets.Shell

请注意,项目类路径中必须有适当的 SWT jar。

您还试图在方法之外的类中使用代码。 Java 代码必须在方法中。比如:

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class HellowWorldSWT
{
  public static void main(final String [] args)
  {
    Display display = new Display();

    Shell shell = new Shell(display);

    shell.setText("Hello World!");

    shell.open();

    while (!shell.isDisposed())
      {

        if (!display.readAndDispatch())
          display.sleep();

      }

    display.dispose();
  }
}

您似乎还创建了设置为使用模块的 Java 项目(Java 9 及更高版本中的新功能)。要不使用模块,请取消选择 New Java Project 向导第二页上的“create module-info.java”选项。

【讨论】:

  • 还是不行。我怎样才能回复这个帖子来解释如何/为什么?
  • 您可以编辑您的问题 - 点击问题下方的编辑链接。请注意,堆栈溢出没有“线程” - 只是一个问题和答案。还要添加指向您尝试学习的教程的链接。
【解决方案2】:

我知道这是一篇旧帖子,我今天遇到了同样的问题。只想在这里分享我的解决方案。

首先我的eclipse是Enterprise Java Developer sversion is 2020-12(4.18.0)。

当我按照教程进行操作时,在“在 Java 编辑器中右键单击并选择 Source > Organize Imports”后,我的代码中添加了以下两行

import org.eclipse.swt.widgets.Shell;
import jdk.internal.org.jline.utils.Display;

解决办法是:

  1. 将“import jdk.internal.org.jline.utils.Display”替换为“import org.eclipse.swt.widgets.Display;”
  2. 右键HellowWorldSWT项目,然后Properties->Java Build Path->Libraries,选择“Class Path”,选择“Add External JAR”,然后选择org.eclipse.swt.win32.win32.x86_64。

这解决了编译错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    相关资源
    最近更新 更多