簡體   English   中英

在bash上運行arduino時(通過Linux的Windows子系統),線程“ AWT-EventQueue-0”中的異常java.awt.HeadlessException

[英]Exception in thread “AWT-EventQueue-0” java.awt.HeadlessException when running arduino on bash (via Windows subsystem of Linux)

我已經運行WSL了很短的時間,並且一直在嘗試通過此控制台編譯和上傳Arduino腳本。

我通過運行sudo apt install arduino但是從那里開始,只要我運行任何arduino命令(甚至只是arduino ),我都會收到以下異常

我嘗試通過此命令行安裝Linux Arduino IDE,但沒有效果。 我的假設是這是WSL和arduino並非針對該環境設計的問題

Exception in thread "AWT-EventQueue-0" 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:204)
    at java.awt.Window.<init>(Window.java:536)
    at java.awt.Frame.<init>(Frame.java:420)
    at java.awt.Frame.<init>(Frame.java:385)
    at javax.swing.JFrame.<init>(JFrame.java:189)
    at arduinopc.<init>(arduinopc.java:35)
    at arduinopc$3.run(arduinopc.java:85)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Exception in thread "main" java.lang.ExceptionInInitializerError
    at processing.app.Preferences.setColor(Preferences.java:851)
    at processing.app.Preferences.init(Preferences.java:273)
    at processing.app.Base.main(Base.java:117)
Caused by: java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
    at sun.awt.HeadlessToolkit.getMenuShortcutKeyMask(HeadlessToolkit.java:236)
    at processing.core.PApplet.<clinit>(Unknown Source)
    ... 3 more

你是對的。 Windows Linux子系統僅適用於命令行應用程序,不適用於運行GUI應用程序。

相對簡單的替代方法是獲取適用於Windows的VirtualBox或QEmu並啟動/安裝一個小型linux發行版。

如果僅是要運行的Arduino IDE,則也不需要它,因為它也可用於Windows:
https://www.arduino.cc/zh/Main/軟件

Arduino IDE通常用作GUI,WLS不支持它,因此錯誤消息為:

No X11 DISPLAY variable was set, but this program performed an operation which requires it.

但是,Arduino IDE 1.5.2中添加了Arduino IDE的命令行操作,該命令的確允許從控制台執行許多操作(請參閱https://github.com/arduino/Arduino/blob/master/build/shared /manpage.adoc )。 最初,這要求您運行虛擬幀緩沖區,但是在Arduino IDE的最后幾個發行版中不再需要。

我通過運行sudo apt install arduino安裝了arduino

當您這樣做時,您會得到一個非常過時且可能是非標准版本的Arduino IDE,它不支持命令行用法。 由於許可文檔問題 ,無法通過包管理器更新可用的Arduino IDE的版本。 您應該始終通過從https://www.arduino.cc/zh/Main/Software下載最新版本來安裝Arduino IDE。 完成后,您將可以使用命令行功能。

使用OpenJDK也會發生此異常。 我將Java從OpenJDK更改為Java™,並且該應用程序無例外地運行。

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64/jre/bin/java -version
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)


/usr/java/jdk1.8.0_162/jre/bin/java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM