java - Eclipse HelloWorldSWT 教程 : cannot access import packages

标签 java eclipse import

我最近安装了 Eclipse 以用于在线 Java 类(class),并且正在尝试这些教程。

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 上时提供的注释表明它无法访问这些导入,例如

“The type jdk.internal.org.jline.utils.Display is not accessible”



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

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

Error occurred during initialization of boot layer java.lang.module.FindException: Error reading module: C:\Users\Frank Tavernier\Documents\School\eclipse-workspace\HelloWorldSWT\bin Caused by: java.lang.module.InvalidModuleDescriptorException: HelloWorldSWT.class found in top-level directory (unnamed package not allowed in module)



此外,Eclipse 仍然对导入有同样的提示。

如何说服 Eclipse 运行该程序?

2019 年 1 月 9 日:编辑问题?这似乎是一种继续讨论的糟糕方式。就这样:

感谢您的帮助。

我已经添加了一个主要方法。

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

我导入了正确的包,但它仍然不起作用。

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

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

我尝试使用新获得的知识再次遵循本教程。我没有它的链接。它与 Eclipse 一起提供。

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

在 New Java Project 中,我偏离了教程以取消选择“创建 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();
    }
}

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

Exception in thread "main" java.lang.Error: Unresolved compilation problems: Display cannot be resolved to a type Display cannot be resolved to a type Shell cannot be resolved to a type Shell cannot be resolved to a type

at HelloWorldSWT.main(HelloWorldSWT.java:7)

最佳答案

您正在导入错误的类。 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”选项。

关于java - Eclipse HelloWorldSWT 教程 : cannot access import packages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57736894/

相关文章:

java - 如何将 log4j 配置设置为项目的依赖项?

java - 不带逗号的 NumberFormat 文本字段

java - 如何转义java中的某些字符

java - Maven 项目无法与其他项目一起使用

mysql - 在bash脚本中输出MySQL进程

java - 如何在错误的用户输入后循环特定区域的代码? ( java )

android - 如何编译AndEngine? 1300 多个错误?

java - "References to interface static methods are allowed only at source level 1.8"或更高,当我已经有 1.8 JRE 时

php - 脚本超时已过,如果您想完成导入,请重新提交相同的文件,导入将恢复

MySQL 5.5 - 通过命令行导入大型 sql 文件时出现问题