NetBeans 8中的远程调试GUI Java应用程序(swing)

NetBeans 8中的远程调试GUI Java应用程序(swing),java,swing,user-interface,netbeans,remote-debugging,Java,Swing,User Interface,Netbeans,Remote Debugging,我在2个Linux系统之间的NetBeans IDE中设置了远程调试。远程调试没有GUI的应用程序可以正常工作,但当我尝试远程调试具有swing GUI的应用程序时,出现以下错误: 线程“AWT-EventQueue-0”中出现异常 java.awt.HeadlessException: 未设置X11显示变量,但此程序执行了需要该变量的操作 如果有任何建议,我将不胜感激 NetBeans输出窗口: ant-f/home/toma/NetBeansProjects/GUIFormExamples-

我在2个Linux系统之间的NetBeans IDE中设置了远程调试。远程调试没有GUI的应用程序可以正常工作,但当我尝试远程调试具有swing GUI的应用程序时,出现以下错误:

线程“AWT-EventQueue-0”中出现异常 java.awt.HeadlessException: 未设置X11显示变量,但此程序执行了需要该变量的操作

如果有任何建议,我将不胜感激

NetBeans输出窗口:

ant-f/home/toma/NetBeansProjects/GUIFormExamples-Dremote.platform.password=******-Dremote.platform.rp.target=linux-15-Dremote.platform.java.spec.ver=17-Dremote.platform.rp.filename=linux-Ddebug.class=Antenna-Dnb.internal.action.name=debug远程调试 初始化: 删除:/home/toma/NetBeansProjects/GUIFormExamples/build/build-jar.properties deps jar: 更新属性文件:/home/toma/NetBeansProjects/GUIFormExamples/build/build-jar.properties 汇编: 正在将1个文件复制到/home/toma/NetBeansProjects/GUIFormExamples/build 将库复制到/home/toma/NetBeansProjects/GUIFormExamples/dist/lib。 要在不使用Ant的情况下从命令行运行此应用程序,请尝试: java-jar“/home/toma/NetBeansProjects/GUIFormExamples/dist/GUIFormExamples.jar” 罐子: 连接到192.168.1.122:22 连接到192.168.1.122:22 cmd:mkdir-p'/home/toma/NetBeansProjects//GUIFormExamples/dist' 连接到192.168.1.122:22 完成。 配置文件rp校准密码: 连接到192.168.1.122:22 cmd:cd'/home/toma/NetBeansProjects//GUIFormExamples';'/usr/lib/jvm/j2sdk1.7-oracle/jre/bin/java'-Xdebug-Xrunjdwp:transport=dt_socket,address=localhost:39245-Dfile.encoding=UTF-8-jar/home/toma/NetBeansProjects//GUIFormExamples/dist/GUIFormExamples.jar 线程“AWT-EventQueue-0”中出现异常 java.awt.HeadlessException: 未设置X11显示变量,但此程序执行了需要该变量的操作。 位于java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:207)
在java.awt.Window.(Window.java:535)

您需要使用X11转发,使远程计算机上的GUI在您的计算机上可见(或者提供有效的显示环境变量,以便GUI可以显示在某处)。这是一个Linux配置问题,Java只是抱怨它无法创建GUI,因为(据它所知)没有可用的屏幕。

您需要使用X11转发,使远程计算机上的GUI在您的计算机上可见(或者提供有效的显示环境变量,以便GUI可以显示在某处)。这是一个Linux配置问题,Java只是抱怨它无法创建GUI,因为(据它所知)没有可用的屏幕。

成功!这并不像应该的那么容易,但它确实有效

在NetBeans中(我使用的是版本8),为远程调试创建一个新的Java平台:工具->Java平台->添加平台->远程Java标准版->。。。(有关更多信息,请参阅此链接:)。按调试图标(调试远程)上的下拉菜单并查看输出窗口

如果程序没有GUI,那么这种方法很有效。 如果程序有GUI,我会得到以下错误:“java.awt.HeadlessException:未设置X11显示变量,但该程序执行了需要它的操作”

即使程序有GUI,上面的步骤也会有帮助,因为它会自动在远程服务器上部署您的程序

要调试GUI,我找到的解决方法是使用ssh或VNC远程连接到服务器,并在调试模式下运行java程序:

java-Xdebug-Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=y-jar“/MyPath/Program.jar”

JavaVM应该暂停程序并等待NetBeans调试器连接

在NetBeans中,在程序中设置断点并连接到远程进程:Debug->attach Debugger->Java Debugger,SocketAttach,dt_socket,服务器的IP地址,端口:4000->OK

稍后,只需按调试图标(附加到…)上的下拉菜单即可开始调试

程序应该运行到断点并暂停执行。您应该完全控制编程计算机上的GUI,但程序是在服务器上执行的


在单板计算机(如BeagleBone Black或Raspberry PI)上调试Java程序时,这非常有用,因为这些计算机没有足够的马力来运行NetBeans。当单板计算机用于机器人技术应用,并且需要接收传感器输入和控制电机时,这一点至关重要。

成功!这并不像应该的那么容易,但它确实有效

在NetBeans中(我使用的是版本8),为远程调试创建一个新的Java平台:工具->Java平台->添加平台->远程Java标准版->。。。(有关更多信息,请参阅此链接:)。按调试图标(调试远程)上的下拉菜单并查看输出窗口

如果程序没有GUI,那么这种方法很有效。 如果程序有GUI,我会得到以下错误:“java.awt.HeadlessException:未设置X11显示变量,但该程序执行了需要它的操作”

即使程序有GUI,上面的步骤也会有帮助,因为它会自动在远程服务器上部署您的程序

要调试GUI,我找到的解决方法是使用ssh或VNC远程连接到服务器,并在调试模式下运行java程序:

java-Xdebug-Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=y-jar“/MyPath/Program.jar”

JavaVM应该暂停程序并等待NetBeans调试器连接

在NetBeans中,在程序中设置断点并连接到远程进程:Debug->attach Debugger->Java Debugger,SocketAttach,dt_socket,服务器的IP地址,端口:4000->OK

稍后,只需按调试图标(附加到…)上的下拉菜单即可开始调试

程序应该运行到断点和pau
<sshexec host="${remote.platform.host}" port="${remote.platform.port}" username="${remote.platform.user}" password="${remote.platform.password}" trust="true" usepty="true"
                    command="export DISPLAY=:0; cd '${remote.project.dir}'; ${remote.platform.exec.prefix}'${remote.java.executable}' @{additionaljvmargs} -Dfile.encoding=${runtime.encoding} ${run.jvmargs} ${run.jvmargs.ide} -jar ${remote.dist.jar} ${application.args}"/>