首页 > 解决方案 > 我们如何在 Android 的 Jvdroid IDE 上使用 Abstract Widget Toolkit(AWT)/Swing

问题描述

我在 android 上使用 jvdroid IDE,它在很大程度上准确地编译和执行 Java 代码。但是,我想使用此 IDE 创建使用图形用户界面 (GUI) 的 Java 应用程序。如何使用 swing 或 awt 来完成此任务?

到目前为止,我已经尝试使用 AWT,使用以下代码:

import java.awt.* ;

public class Main {

    public static void main(String[] args){

        Frame f = new Frame() ;

        f.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.desktop/java.awt.GraphicsEnvironment.checkHeadless(Unknown Source)
        at java.desktop/java.awt.Window.<init>(Unknown Source)
        at java.desktop/java.awt.Frame.<init>(Unknown Source)
        at java.desktop/java.awt.Frame.<init>(Unknown Source)
        at Main.main(Main.java:5)

标签: javaandroidawt

解决方案


Swing 产生与您的 awt 编译相同的错误,预期

~/Git/java $ java -cp ./swingx-1.6.jar:. HelloWorldSwing
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.desktop/java.awt.GraphicsEnvironment.checkHeadless(Unknown Source)
        at java.desktop/java.awt.Window.<init>(Unknown Source)
        at java.desktop/java.awt.Frame.<init>(Unknown Source)
        at java.desktop/javax.swing.JFrame.<init>(Unknown Source)
        at HelloWorldSwing.createAndShowGUI(HelloWorldSwing.java:11)
        at HelloWorldSwing$1.run(HelloWorldSwing.java:28)
        at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
        at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
~/Git/java $

然后,swt 产生它自己的错误。但在很大程度上,swt 错误表明图形显示(gimp 工具包或 gtk)功能在java for android中不可用:

~/Git/Java $ javac -cp ./swt2.jar:. HelloWorldSWT.java
~/Git/Java $ java -cp ./swt2.jar:. HelloWorldSWT
Exception in thread "main" java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons:
        no swt-gtk-4946r21 in java.library.path: [/data/data/ru.iiec.jvdroid/files/lib/server, /data/data/ru.iiec.jvdroid/files/lib, /data/data/ru.iiec.jvdroid/files/../lib, /data/user/0/ru.iiec.jvdroid/files/lib, /data/user/0/ru.iiec.jvdroid/files/lib/jli, /data/user/0/ru.iiec.jvdroid/files/lib/server, /usr/java/packages/lib, /lib, /usr/lib]
        no swt-gtk in java.library.path: [/data/data/ru.iiec.jvdroid/files/lib/server, /data/data/ru.iiec.jvdroid/files/lib, /data/data/ru.iiec.jvdroid/files/../lib, /data/user/0/ru.iiec.jvdroid/files/lib, /data/user/0/ru.iiec.jvdroid/files/lib/jli, /data/user/0/ru.iiec.jvdroid/files/lib/server, /usr/java/packages/lib, /lib, /usr/lib]
        no swt in java.library.path: [/data/data/ru.iiec.jvdroid/files/lib/server, /data/data/ru.iiec.jvdroid/files/lib, /data/data/ru.iiec.jvdroid/files/../lib, /data/user/0/ru.iiec.jvdroid/files/lib, /data/user/0/ru.iiec.jvdroid/files/lib/jli, /data/user/0/ru.iiec.jvdroid/files/lib/server, /usr/java/packages/lib, /lib, /usr/lib]
        Can't load library: /data/user/0/ru.iiec.jvdroid/app_HOME/.swt/lib/linux/aarch64/libswt-gtk-4946r21.so
        Can't load library: /data/user/0/ru.iiec.jvdroid/app_HOME/.swt/lib/linux/aarch64/libswt-gtk.so
        Can't load library: /data/user/0/ru.iiec.jvdroid/app_HOME/.swt/lib/linux/aarch64/libswt.so
        /data/data/ru.iiec.jvdroid/app_HOME/.swt/lib/linux/aarch64/libswt-gtk-4946r21.so: dlopen failed: library "libc.so.6" not found

        at org.eclipse.swt.internal.Library.loadLibrary(Library.java:348)
        at org.eclipse.swt.internal.Library.loadLibrary(Library.java:257)
        at org.eclipse.swt.internal.C.<clinit>(C.java:19)
        at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:209)
        at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:155)
        at org.eclipse.swt.widgets.Display.<clinit>(Display.java:165)
        at HelloWorldSWT.main(HelloWorldSWT.java:6)
~/Git/Java $

推荐阅读