在线程“AWT-EventQueue-0”中的异常java.awt.HeadlessException在bash上运行arduino(通过Linux的Windows子系统)

在线程“AWT-EventQueue-0”中的异常java.awt.HeadlessException在bash上运行arduino(通过Linux的Windows子系统)

问题描述:

我一直在短时间内运行WSL,并且一直在尝试编译并通过这个控制台上传Arduino脚本。在线程“AWT-EventQueue-0”中的异常java.awt.HeadlessException在bash上运行arduino(通过Linux的Windows子系统)

我通过运行sudo apt install arduino安装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/en/Main/Software

Arduino的IDE是一个典型的用作图形用户界面,其是不是你的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易于安装的Arduino Arduino的安装

当你做,你得到的Arduino IDE不支持命令行使用的一个非常过时和可能的非标版本。由于许可文档issues,无法通过软件包管理器更新Arduino IDE的版本。您应该始终通过从https://www.arduino.cc/en/Main/Software下载最新版本来安装Arduino IDE。一旦你完成了,你将能够使用命令行功能。