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)
# 1 楼答案
你导入了错误的类。SWT类都将
org.eclipse.swt
作为包名的第一部分Display
是org.eclipse.swt.widgets.Display
,Shell
是org.eclipse.swt.widgets.Shell
注意,在项目类路径中必须有适当的SWT jar
您还试图在方法之外的类中使用代码。Java代码必须在方法中。比如:
您似乎还创建了Java项目,以使用模块(Java9之后的新版本)。要不使用模块,请取消选择“创建模块信息”。新java项目向导第二页上的“java”选项
# 2 楼答案
我知道这是一个老帖子,我今天遇到了同样的问题。我只想在这里分享我的解决方案
首先,我的eclipse是Enterprise Java Developer,版本是2020-12(4.18.0)
当我学习教程时,在“在Java编辑器中右键单击并选择Source>;Organize Imports”之后,我的代码中添加了以下两行代码
解决方案是:
这解决了编译错误