Uiautomatorviewer SWT异常

Uiautomatorviewer SWT exception

由于 StackExchange 建议我不要在 previously existing post 上寻求帮助或澄清,我正在创建一个新线程。

在 Windows 10x64 上,我下载了 Eclipse SWT(在下载页面的倒数第二部分),将我的 ANDROID_SWT 环境变量设置为 <download location>\swt.jar,然后再次尝试从 cmd 运行 uiautomatorviewer,但收到与我尝试使用与 eclipse 捆绑的 SWT 时相同的错误消息:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Listener
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
    at java.lang.Class.getMethod0(Class.java:3018)
    at java.lang.Class.getMethod(Class.java:1784)
    at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.widgets.Listener
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more

有没有其他人遇到过这个错误,如果有,根本原因是什么?

提前感谢您的宝贵时间和帮助!

准确地遵循these instructions。我错误地尝试下载 Eclipse SWT 以解决我遇到的其他问题;在 CLASSPATHANDROID_SWT 环境变量中设置这个不同的 SWT 版本导致了这个异常。

确保在 Android studio 中选择的 JDK 位置与在环境变量中设置的 JDK 相同。

在我的例子中,将 ANDROID_SWT 添加到环境变量或编辑 PATH 并没有解决问题。因此,我通过 this 问题的帮助找到了不同的解决方案。

运行 uiautomatorviewer.bat 并输出:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Control
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
    at java.lang.Class.getMethod0(Class.java:3018)
    at java.lang.Class.getMethod(Class.java:1784)
    at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:650)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:632)
Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.widgets.Listener
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)

解法:

转到:https://www.findjar.com/ 并搜索丢失的 class。 在这种情况下搜索 class :

org.eclipse.swt.widgets.Control

你的情况是:

org.eclipse.swt.widgets.Listener

错误中 classes 的名称可以更改,但所需的所有 classes 都来自将要下载的 .jar 文件。

在结果中点击:

[CLASS] org.eclipse.swt.widgets.Control

或针对您的情况:

[CLASS] org.eclipse.swt.widgets.Listener

下载适合您 OS 的最新文件。 This 是最新的,目前适合 Windowsx86_64。

将下载的.jar文件放入:

C:\Users\{userId}\AppData\Local\Android\Sdk\tools\lib

或 OS 的等效路径。

现在uiautomatorviewer.bat应该运行没有任何问题。