2017-06-01 79 views
1

的AWT窗口,当我想了解AWT和借来的一本书,showes下面的代码:异常试图所以最近在Java中创建

/*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); 
     } 
} 

此代码编译。据该书此代码应产生无功能任何一个空的窗口,但是当我试着执行它时,它抛出一个异常:

Exception in thread "main" java.awt.HeadlessException: No X11 DISPLAY variable was set, but this program performed an operation which requires it. at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:207) at java.awt.Window.(Window.java:535) at java.awt.Frame.(Frame.java:420) at Listing2301.main(Listing2301.java:7)

我从Ubuntu的bash的vi编辑器的工作,我有安装在我的Windows 10 PC上。

我的程序设计教授建议打字export DISPLAY=:0.0进入bash。 编译代码,并再次执行它后,错误信息更改:

Exception in thread "main" java.lang.InternalError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable. 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) at sun.awt.X11GraphicsEnvironment.(X11GraphicsEnvironment.java:74) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:195) at java.awt.GraphicsEnvironment.createGE(GraphicsEnvironment.java:102) at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:81) at java.awt.Window.initGC(Window.java:467) at java.awt.Window.init(Window.java:487) at java.awt.Window.(Window.java:536) at java.awt.Frame.(Frame.java:420) at Listing2301.main(Listing2301.java:7)

如何获取空AWT窗口?代码是否错误?或者我需要配置不同的bash?

+0

说真的,你为什么要学习AWT? 20年来,它已被认为已经过时了。 – RealSkeptic

+0

我听说它让引入摆动更容易。我发现的所有关于挥杆的书都基于AWT的知识,我没有。 – Rismosch

+0

我应该忽略AWT并直接跳进秋千吗? – Rismosch

回答

1

Windows 10的Ubuntu子系统基本上是同一台计算机内的一个单独的操作系统。非常像虚拟机 - 它可以访问你的磁盘,但它不能运行任何Windows EXE文件。

它运行的Java是Linux Java。不是Windows Java,它是一个EXE文件。因此,它无法访问Windows GUI。它寻找在机器上运行的X服务器,就像它在Linux机器上通常所做的那样。但是这样的服务器通常不会在Windows机器上运行。

您应该在Windows下运行您的图形程序,而不是在Ubuntu子系统中。但是,非图形Java程序应该没有问题。

+0

我使用** javac **编译并** java **编译并运行我的代码。所以你说这不应该工作? – Rismosch

+0

@Rismosch好吧,实际上'javac'应该可以正常工作。但是'java'只能用于Windows 10 Ubuntu子系统中的非GUI程序。 – RealSkeptic

+0

谢谢。我不知道。我只是在一个名为“Eclipse”的程序中尝试了代码,并且代码正常工作。我的教授说要学习像vi编辑器这样的java编辑器比Eclipse这样的程序更好。 – Rismosch