尝试在 java 中创建 AWT 窗口时出现异常
Posted
技术标签:
【中文标题】尝试在 java 中创建 AWT 窗口时出现异常【英文标题】:Exception when trying to create an AWT window in java 【发布时间】:2017-06-01 14:11:11 【问题描述】:所以最近想学习AWT,借了一本书,上面有如下代码:
/*Listing2301.java*/
import java.awt.*;
class Listing2301
public static void main(String[] args)
Frame wnd = new Frame("Einfaches Fenster");
wnd.setSize(400,300);
wnd.setVisible(true);
这段代码可以编译。根据这本书,这段代码应该生成一个没有任何功能的空窗口,但是当我尝试执行它时会引发异常:
线程“main”中的异常 java.awt.HeadlessException: No X11 DISPLAY 变量被设置了,但是这个程序执行了一个操作 需要它。 在 java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:207) 在 java.awt.Window.(Window.java:535) 在 java.awt.Frame.(Frame.java:420) 在Listing2301.main(Listing2301.java:7)
我正在使用安装在我的 Windows 10 PC 上的 ubuntu bash 中的 vi 编辑器。
我的编程教授建议在 bash 中输入 export DISPLAY=:0.0
。
编译代码并再次执行后,错误信息变为:
线程“主”java.lang.InternalError 中的异常:无法连接到 X11 窗口服务器使用 ':0.0' 作为 DISPLAY 变量的值。 在 sun.awt.X11GraphicsEnvironment.initDisplay(本机方法) 在 sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.java:65) 在 sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:110) 在 java.security.AccessController.doPrivileged(本机方法) 在 sun.awt.X11GraphicsEnvironment.(X11GraphicsEnvironment.java:74) 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(Class.java:195) 在 java.awt.GraphicsEnvironment.createGE(GraphicsEnvironment.java:102) 在 java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:81) 在 java.awt.Window.initGC(Window.java:467) 在 java.awt.Window.init(Window.java:487) 在 java.awt.Window.(Window.java:536) 在 java.awt.Frame.(Frame.java:420) 在Listing2301.main(Listing2301.java:7)
如何获得那个空的 AWT 窗口?代码错了吗?还是我需要以不同的方式配置 bash?
【问题讨论】:
说真的,你为什么要学习AWT?它已经被认为已经过时了 20 年了。 我听说它可以更容易地介绍挥杆。我发现的所有关于 Swing 的书都建立在 AWT 知识之上,而我没有。 我应该忽略 AWT 并直接跳入摇摆吗? 无论如何,您可能应该使用 Java 8 学习 JavaFX,而不是 Swing。但是如果你想学习Swing,它真的不需要AWT知识。试试Oracle Tutorial。 【参考方案1】:Windows 10 的 Ubuntu 子系统基本上是同一台计算机内的独立操作系统。非常像虚拟机 - 它可以访问您的磁盘,但不能运行任何 Windows EXE 文件。
它运行的 Java 是 Linux Java。不是 Windows Java,它是一个 EXE 文件。因此,它无法访问 Windows GUI。它像通常在 Linux 机器上那样寻找在机器上运行的 X 服务器。但是这样的服务器通常不能在 Windows 机器上运行。
您应该在 Windows 下运行图形程序,而不是在 Ubuntu 子系统中。但是,非图形 Java 程序应该没有问题。
【讨论】:
我使用 javacjavac
应该可以正常工作。但java
仅适用于 Windows 10 Ubuntu 子系统中的非 GUI 程序。
谢谢。我不知道。我刚刚在一个名为“Eclipse”的程序中尝试了代码,并且代码按预期工作。我的教授说学习像vi-editor这样的java编辑器比像Eclipse这样的程序要好。
@Rismosch 我是一名拥有 30 年经验的专业人士,我使用 Eclipse... 无论如何,vi 并不是 Linux 独有的。您可以在您的 Windows 上安装 vim 并根据需要使用它。不过,它并不是真正的 Java 编辑器。只是一个纯文本编辑器。
我相信你。我的教授刚刚说它不利于学习,因为它会自动向您显示错误并告诉您如何解决它们,而您却不理解它。他说 Eclipse 帮助你运行代码,而不是帮助你理解它。以上是关于尝试在 java 中创建 AWT 窗口时出现异常的主要内容,如果未能解决你的问题,请参考以下文章
在 Appdata 文件夹中创建文本文件时出现异常,它说文件正在被另一个进程使用
在 ADT Mac Bundle 中创建第一个 android 应用程序时出现 java.lang.NullPointerException