2017-06-01 15 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