Uiautomatorviewer SWT исключение

Поскольку StackExchange посоветовал мне не обращаться за помощью или разъяснениями к ранее существовавшему сообщению, я создаю новую тему.

В Windows 10x64 я скачал Eclipse SWT (во втором разделе на странице "Загрузки"), установил свой ANDROID_SWT переменная среды для <download location>\swt.jarи попытались бежать uiautomatorviewer от cmd опять же, только чтобы получить то же сообщение об ошибке, что и при попытке использовать SWT в комплекте с eclipse:

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

Кто-нибудь еще сталкивался с этой ошибкой, и если да, то какова была основная причина?

Заранее спасибо за ваше время и помощь!

4 ответа

В моем случае добавление ANDROID_SWT к переменным среды или редактирование PATH не решило проблему. Поэтому я нашел другое решение с помощью этого вопроса.

Запуск 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/ и найдите отсутствующий класс. В этом случае ищите класс:

      org.eclipse.swt.widgets.Control

Для вашего случая это:

      org.eclipse.swt.widgets.Listener

Имена классов в ошибке могут измениться, но все необходимые классы взяты из файла .jar, который будет загружен.

В результатах нажмите:

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

или для вашего случая:

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

Загрузите последний и подходящий для вашей ОС файл. Это была последняя версия, подходящая для Windowsx86_64 на данный момент.

Поместите загруженный файл .jar в:

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

или эквивалентный путь для вашей ОС.

Теперь uiautomatorviewer.bat должен работать без проблем.

В моем случае исключением было

      Exception in thread "main" java.lang.NoClassDefFoundError: 
  org/eclipse/swt/custom/TableTreeItem
at org.eclipse.jface.util.OpenStrategy.initializeHandler(OpenStrategy.java:270)
at org.eclipse.jface.util.OpenStrategy.<init>(OpenStrategy.java:108)
at org.eclipse.jface.viewers.StructuredViewer.hookControl(StructuredViewer.java:1213)
at org.eclipse.jface.viewers.ColumnViewer.hookControl(ColumnViewer.java:68)
at org.eclipse.jface.viewers.AbstractTreeViewer.hookControl(AbstractTreeViewer.java:1452)
at org.eclipse.jface.viewers.TreeViewer.hookControl(TreeViewer.java:274)
at org.eclipse.jface.viewers.TreeViewer.<init>(TreeViewer.java:137)
at org.eclipse.jface.viewers.TreeViewer.<init>(TreeViewer.java:124)
at com.android.uiautomator.UiAutomatorView.<init>(UiAutomatorView.java:361)
at com.android.uiautomator.UiAutomatorViewer.createContents(UiAutomatorViewer.java:66)
at org.eclipse.jface.window.Window.create(Window.java:431)
at org.eclipse.jface.window.Window.open(Window.java:790)
at com.android.uiautomator.UiAutomatorViewer.main(UiAutomatorViewer.java:78)
Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.custom.TableTreeItem
at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 13 more

Шаги для решения

  1. Перейдите на https://jar-download.com/
  2. Найдите отсутствующий файл jar, в моем случае это был org.eclipse.swt.custom.tabletreeitem .
  3. Загрузите файл jar, совместимый с вашей системой Mac/Win/Linux (в моем случае это был Mac, введите описание изображения здесь
  4. Извлеките файл jar и скопируйте его
  5. Перейдите в папку lib внутри SDK (Android/Sdk/Tools/Lib
  6. Вставьте файл jar в папку lib
  7. Перезагрузите терминал или cmd
  8. Запустите команду еще раз для cd $ANDROID_HOME/tools/bin
  9. Запустите команду ./uiautomatorviewer

Альтернативно

Попробуйте скачать файл swt jar другой версии и скопировать его в соответствующие папки. Следите за этой темой:

https://github.com/android/android-test/issues/911#issuecomment-849389068

Убедитесь, что расположение JDK, выбранное в студии Android, такое же, как JDK, установленное в переменной среды.

Точно следуйте этим инструкциям. Я сделал ошибку, пытаясь загрузить Eclipse SWT для устранения других проблем, которые у меня были; установка этой другой версии SWT в CLASSPATH а также ANDROID_SWT Переменные среды вызвали это исключение.

Другие вопросы по тегам