Это связано с тем, что android studio / intellij по-прежнему использует старую инфраструктуру JavaLaunching, которая устарела в Java 7. Либо вы устанавливаете версию JDK 6 с окончанием срока службы, либо запрашиваете обновление в Android Studio для использования Oracle. JDK appbundle.
Я очень не хочу устанавливать JAVA 6, поэтому у меня будет два JDK на моей машине. поэтому я взломал файлы студии Android, чтобы их можно было запускать из дока:
/Applications/Android Studio.app/Contents/MacOS
) из заглушки JavaLauncher на сценарий оболочки, вот как это выглядит : #!/bin/bash export JAVA_HOME=`/usr/libexec/java_home` echo JAVA_HOME=$JAVA_HOME export APP_PACKAGE='/Applications/Android Studio.app' exec $JAVA_HOME/bin/java -cp $JAVA_HOME/lib/tools.jar:"$APP_PACKAGE"/lib/bootstrap.jar:"$APP_PACKAGE"/lib/extensions.jar:"$APP_PACKAGE"/lib/util.jar:"$APP_PACKAGE"/lib/jdom.jar:"$APP_PACKAGE"/lib/log4j.jar:"$APP_PACKAGE"/lib/trove4j.jar:"$APP_PACKAGE"/lib/jna.jar -Didea.platform.prefix=AndroidStudio -Didea.paths.selector=AndroidStudioPreview -Dfile.encoding=UTF-8 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -XX:+UseCodeCacheFlushing -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -XX:+HeapDumpOnOutOfMemoryError -Xverify:none -Xbootclasspath/a:"$APP_PACKAGE"/lib/boot.jar -XX:MaxPermSize=256m -Xdock:icon="$APP_PACKAGE"/Contents/Resources/AndroidStudio.icns com.intellij.idea.Main
обязательно chmod +x ./studio
к нему.
/Applications/Android Studio.app/Contents
. В противном случае Apple все равно попросит вас установить JDK 6: отредактируйте файл и удалите весь раздел Java. Различия будут выглядеть следующим образом: http://pastebin.com/QS8M45cr Взгляните на xwininfo
.
Для получения дополнительной информации вам также могут понравиться xprop
и xspy
.
Обновление: Ага. Попробуйте использовать xwininfo
и -root
с -tree
или -children
, чтобы задействовать все окна.
И изменения могут быть отслеживается с помощью xprop -spy
.
Я считаю, что захват X-сервера (XGrabServer(3)) предотвратит изменения в иерархии окон. Однако это немного жесткий метод, поэтому его следует применять только в том случае, если он действительно необходим.
Пример кода, который ходит по иерархии окон, строит дерево, использует события окон для поддержания его в актуальном состоянии и игнорирует ошибки протокола X, неизбежные из-за гонок, см. в файле src/VBox/Additions/x11/VBoxClient/seamless-x11.cpp в исходном коде VirtualBox.