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
Шаги для решения
- Перейдите на https://jar-download.com/
- Найдите отсутствующий файл jar, в моем случае это был org.eclipse.swt.custom.tabletreeitem .
- Загрузите файл jar, совместимый с вашей системой Mac/Win/Linux (в моем случае это был Mac, введите описание изображения здесь
- Извлеките файл jar и скопируйте его
- Перейдите в папку lib внутри SDK (Android/Sdk/Tools/Lib
- Вставьте файл jar в папку lib
- Перезагрузите терминал или cmd
- Запустите команду еще раз для cd $ANDROID_HOME/tools/bin
- Запустите команду ./uiautomatorviewer
Альтернативно
Попробуйте скачать файл swt jar другой версии и скопировать его в соответствующие папки. Следите за этой темой:
https://github.com/android/android-test/issues/911#issuecomment-849389068
Убедитесь, что расположение JDK, выбранное в студии Android, такое же, как JDK, установленное в переменной среды.
Точно следуйте этим инструкциям. Я сделал ошибку, пытаясь загрузить Eclipse SWT для устранения других проблем, которые у меня были; установка этой другой версии SWT в CLASSPATH
а также ANDROID_SWT
Переменные среды вызвали это исключение.