所以最近我想学习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:否X11 DISPLAY 变量已设置,但此程序执行了一个操作 需要它。 at 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
。
编译代码并再次执行后,错误消息更改为:
线程“main”中的异常java.lang.InternalError:无法连接到 X11窗口服务器使用':0.0'作为DISPLAY变量的值。 at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method) at sun.awt.X11GraphicsEnvironment.access $ 200(X11GraphicsEnvironment.java:65) at sun.awt.X11GraphicsEnvironment $ 1.run(X11GraphicsEnvironment.java:110) at java.security.AccessController.doPrivileged(Native Method) 在sun.awt.X11GraphicsEnvironment。(X11GraphicsEnvironment.java:74) at java.lang.Class.forName0(Native Method) 在java.lang.Class.forName(Class.java:195) 在java.awt.GraphicsEnvironment.createGE(GraphicsEnvironment.java:102) at 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吗?
答案 0 :(得分:1)
Windows 10的Ubuntu子系统基本上是同一台计算机中的独立操作系统。非常像虚拟机 - 它可以访问您的磁盘,但它无法运行任何Windows EXE文件。
它运行的Java是 Linux Java。不是Windows Java,它是一个EXE文件。因此,它无法访问Windows GUI。它寻找在机器上运行的X服务器,就像在Linux机器上一样。但是这样的服务器通常不能在Windows机器上运行。
您应该在Windows下运行图形程序,而不是在Ubuntu子系统中运行。但是,非图形Java程序应该没有问题。