有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Eclipse HelloWorldSWT教程:无法访问导入包

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

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

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

然后我试着做些不同的事情。我删除了这个项目,并在下面的步骤中添加了名为Classpath I.s.o.Modulepath的“项目”。(教程告诉我们添加org.eclipse.swt.{platform}.{os}。 {arch}项目,但我不知道怎么做。)我还添加了主方法,这是我之前忘记的。现在只有4个x,我可以给出一个run命令,其中包括在控制台中生成以下输出:

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年9月1日:编辑问题?这似乎是继续讨论的糟糕方式。下面是:

谢谢你的帮助

我已经添加了一个主方法

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

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

greg-449:“请注意,在项目类路径中必须有适当的SWT jar。”
你怎么能说服Eclipse把它放在那里呢? 在package explorer中有一个名为swt的项目。罐子在里面

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

我试图用新学到的知识再次学习教程。我和它没有联系。它与Eclipse一起出现

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

在新的Java项目中,我偏离了教程,取消选择了“创建模块信息”。java文件'

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

我粘贴了代码,导入了Eclipse建议的正确软件包。Eclipse找不到那些“正确”的包。(以前(在最初的项目中)可能会找到它们,但由于某种原因,创建这个新项目改变了这一点。)

代码是: 导入组织。日食swt。小部件。陈列 导入组织。日食swt。小部件。贝壳

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();
    }
}

当我运行程序时,这是printed在命令窗口中:

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)


共 (2) 个答案

  1. # 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项目,以使用模块(Java9之后的新版本)。要不使用模块,请取消选择“创建模块信息”。新java项目向导第二页上的“java”选项

  2. # 2 楼答案

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

    首先,我的eclipse是Enterprise Java Developer,版本是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项目,然后单击属性->;Java构建路径->;库,选择“类路径”,选择“添加外部JAR”,然后选择组织。日食swt。win32。win32。x86_64

    这解决了编译错误