我需要帮助在库拉创建一个显示Swing的GUI的包。我正在使用Java和OSGI创建包。我在raspberryPI上运行它。
我将这段代码放入包的激活器中:
public void activate(ComponentContext componentContext, Map<String,Object> properties)
{
System.out.println("Sono AstroGUI!!!!");
Runnable runnable = new Runnable() {
public void run() {
createAndShow();
}
};
SwingUtilities.invokeLater(runnable);
}
static void createAndShow() {
JFrame frame = new JFrame("Hello World");
frame.setSize(640,480);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}但是,当我上传包时,系统会返回以下错误:
线程“AWT 0”java.awt.HeadlessException中的异常:没有设置X11显示变量,但该程序执行了需要它的操作。java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:207) at java.awt.Window.(Window.java:536) at java.awt.Frame.(Frame.java:420) at javax.swing.JFrame.(JFrame.java:225) at com.riccardofontanini.astrogui.AstroGUIActivator.createAndShow(AstroGUIActivator.java:56) at com.riccardofontanini.astrogui.AstroGUIActivator$1.run(AstroGUIActivator.java:47) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744) at java.awt.EventQueue.access$400(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:697) at java.awt.EventQueue$3.run(EventQueue.java:691) at java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) at java.awt.EventQueue.dispatchEvent(EventQueue )。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)
请帮帮我!
发布于 2016-05-02 21:22:01
当然,按照前面的建议,一定要正确地设置X11。您还可以尝试编辑Kura的启动脚本,以确保在Kura启动时X已经准备就绪。启动脚本位于/opt/eclipse/kura/bin中。库在引导时使用的默认脚本是start_kura_background.sh。编辑此文件并添加以下行:
if ! xset q &>/dev/null; then
echo “Starting X Server...”
su -s /bin/bash -c xinit root& export DISPLAY=:0
echo “X Server started !”
else
echo “X Server already running, DISPLAY variable setted”另外,您使用的是什么版本的Java?我只在一个完整的Oracle JRE上看到了这一工作。我还没有在OpenJDK上尝试过Eclipse + Swing,它也不会在上工作。
谢谢,
--戴夫
https://stackoverflow.com/questions/36978449
复制相似问题