Макнули тут носом в старый топик: у человека не грузится программа на java.
Проблема была в том, что у него на десктопе нестандартный window manager - DWM. Под другим всё работает.
Решение внезапно нашлось на Арчевики - оказывается, в Жабе есть огромный захардкоженый список window managers, и если скачать специальную утилиту и временно переименоваться из DWM в LG3D, то всё заработает.
Заинтригованный, полез я смотреть, что лучшие в мире разработчики джавы накодили внутри, и обнаружил вот такие чудесные моменты:
самая соль здесь: https://gist.github.com/olegchir/65f39ddb73f01107625338c26da84231
а вот здесь вообще весь файл (смотреть не обязательно, только если хочется почувствовать контекст): https://gist.github.com/olegchir/fcaa55dba359e10e093ff045d3916037
как тут же подсказали друзья, мы не одиноки во вселенной, и в android существует чем-то идейно похожий класс на восемь тысяч строчек: https://github.com/android/platform_frameworks_base/blob/master/services/core...
возникает несколько вопросов
- вы согласны с таким алгоритмом перебора Window Managers? Если нет, как бы сделали эту задачу вы?
- зачем нужны эти лютейшие цепочки из if'ов? Неужели нельзя оформить всё в виде паттерна стратегия? Или такое сокращение убьёт весь перфоманс? Особенно этот вопрос актуален для километрового файла на Андроиде..