Вопрос или проблема
Я пытался запустить программу javafx на своем mac и столкнулся с этой ошибкой:
26 окт 2024 7:54:11 AM com.sun.glass.ui.mac.MacApplication lambda$waitForReactivation$6
ПРЕДУПРЕЖДЕНИЕ: Время ожидания при ожидании реактивации приложения
*** Завершение приложения из-за необработанного исключения 'NSInternalInconsistencyException', причина: '0x0 является недопустимым NSTrackingRectTag. Общие возможные причины этого: 1. этот trackingRectTag уже удален, 2. NSTrackingRectTag был усечен до 32 бит в какой-то момент.'
*** Первый стек вызовов исключения:
(
0 CoreFoundation 0x0000000182998ec0 __exceptionPreprocess + 176
1 libobjc.A.dylib 0x000000018247ecd8 objc_exception_throw + 88
2 Foundation 0x0000000183b95588 -[NSCalendarDate initWithCoder:] + 0
3 AppKit 0x0000000186c8d7c4 -[_NSTrackingAreaAKViewHelper removeTrackingRect:] + 200
4 libglass.dylib 0x0000000111e5ef7c Java_com_sun_glass_ui_mac_MacApplication__1getMacKey + 3456
5 libglass.dylib 0x0000000111e64074 RemoteLayerHostRemoteIdInLocal + 3620
6 AppKit 0x00000001864a186c -[NSView setFrame:] + 304
7 libglass.dylib 0x0000000111e640d4 RemoteLayerHostRemoteIdInLocal + 3716
8 AppKit 0x00000001864ae2a4 -[NSView resizeWithOldSuperviewSize:] + 488
9 AppKit 0x00000001864adc30 -[NSView resizeSubviewsWithOldSize:] + 360
10 AppKit 0x0000000186494074 -[NSView setFrameSize:] + 948
11 AppKit 0x00000001864a186c -[NSView setFrame:] + 304
12 AppKit 0x00000001864ae2a4 -[NSView resizeWithOldSuperviewSize:] + 488
13 AppKit 0x00000001864adc30 -[NSView resizeSubviewsWithOldSize:] + 360
14 AppKit 0x0000000186494074 -[NSView setFrameSize:] + 948
15 AppKit 0x00000001864ace0c -[NSThemeFrame setFrameSize:] + 244
16 AppKit 0x00000001864ac768 -[NSWindow _oldPlaceWindow:fromServer:] + 532
17 AppKit 0x00000001864abc1c -[NSWindow _setFrameCommon:display:fromServer:] + 1984
18 libglass.dylib 0x0000000111e6f0c4 Java_com_sun_glass_ui_mac_MacWindow__1setBounds2 + 416
19 ??? 0x000000013fd3cfd4 0x0 + 5365813204
20 ??? 0x000000013fd39110 0x0 + 5365797136
21 ??? 0x000000013fd39110 0x0 + 5365797136
22 ??? 0x000000013fd39110 0x0 + 5365797136
23 ??? 0x000000013fd396b0 0x0 + 5365798576
24 ??? 0x000000013fd39110 0x0 + 5365797136
25 ??? 0x000000013fd39110 0x0 + 5365797136
26 ??? 0x000000013fd39110 0x0 + 5365797136
27 ??? 0x000000013fd39110 0x0 + 5365797136
28 ??? 0x000000013fd39110 0x0 + 5365797136
29 ??? 0x000000013fd39110 0x0 + 5365797136
30 ??? 0x000000013fd39110 0x0 + 5365797136
31 ??? 0x000000013fd39110 0x0 + 5365797136
32 ??? 0x000000013fd39110 0x0 + 5365797136
33 ??? 0x000000013fd39110 0x0 + 5365797136
34 ??? 0x000000013fd39110 0x0 + 5365797136
35 ??? 0x000000013fd396b0 0x0 + 5365798576
36 ??? 0x000000013fd39110 0x0 + 5365797136
37 ??? 0x000000013fd396b0 0x0 + 5365798576
38 ??? 0x000000013fd38ea0 0x0 + 5365796512
39 ??? 0x000000013fd39440 0x0 + 5365797952
40 ??? 0x000000013fd38ea0 0x0 + 5365796512
41 ??? 0x000000013fd38ea0 0x0 + 5365796512
42 ??? 0x000000013fd39110 0x0 + 5365797136
43 ??? 0x000000013fd396b0 0x0 + 5365798576
44 ??? 0x000000013fd34114 0x0 + 5365776660
45 libjvm.dylib 0x0000000102364764 _ZN9JavaCalls11call_helperEP9JavaValueRK12methodHandleP17JavaCallArgumentsP10JavaThread + 984
46 libjvm.dylib 0x00000001023d575c _ZL20jni_invoke_nonstaticP7JNIEnv_P9JavaValueP8_jobject11JNICallTypeP10_jmethodIDP18JNI_ArgumentPusherP10JavaThread + 992
47 libjvm.dylib 0x00000001023da184 jni_CallVoidMethod + 284
48 libglass.dylib 0x0000000111e5a998 JNI_OnLoad + 204
49 Foundation 0x0000000183b00b90 __NSThreadPerformPerform + 264
50 CoreFoundation 0x0000000182926414 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28
51 CoreFoundation 0x00000001829263a8 __CFRunLoopDoSource0 + 176
52 CoreFoundation 0x000000018292610c __CFRunLoopDoSources0 + 244
53 CoreFoundation 0x0000000182924cf8 __CFRunLoopRun + 840
54 CoreFoundation 0x0000000182924334 CFRunLoopRunSpecific + 572
55 HIToolbox 0x000000018dd5d0cc RunCurrentEventLoopInMode + 292
56 HIToolbox 0x000000018dd62ebc ReceiveNextEventCommon + 636
57 HIToolbox 0x000000018dd63020 _BlockUntilNextEventMatchingListInModeWithFilter + 76
58 AppKit 0x0000000186468a70 _DPSNextEvent + 660
59 AppKit 0x0000000186d8e7b8 -[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 688
60 AppKit 0x000000018645bb7c -[NSApplication run] + 480
61 libglass.dylib 0x0000000111e5cb20 JNI_OnLoad + 8788
62 Foundation 0x0000000183b00b90 __NSThreadPerformPerform + 264
63 CoreFoundation 0x0000000182926414 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28
64 CoreFoundation 0x00000001829263a8 __CFRunLoopDoSource0 + 176
65 CoreFoundation 0x000000018292610c __CFRunLoopDoSources0 + 244
66 CoreFoundation 0x0000000182924cf8 __CFRunLoopRun + 840
67 CoreFoundation 0x0000000182924334 CFRunLoopRunSpecific + 572
68 libjli.dylib 0x0000000100e10e84 CreateExecutionEnvironment + 404
69 libjli.dylib 0x0000000100e0c984 JLI_Launch + 1152
70 java 0x0000000100dc7bb0 main + 404
71 dyld 0x00000001824bc274 start + 2840
)
libc++abi: завершение из-за необработанного исключения типа NSException
Я только что перешел с компьютера на Windows на Mac, смотрел руководство по установке IntelliJ и Java и попытался запустить свою первую программу javafx на Mac, но она не удалась. Я пытался исследовать эту ошибку, но пока не нашел никаких решений. Я использую Oracle OpenJDK 23.0.1, но я также использовал версии, которые IntelliJ автоматически загрузил, и они все равно не работают. Я использую скрипт сборки Maven.
У меня также появляется эта ошибка, заявляющая, что “java неожиданно завершил работу” (она очень длинная, поэтому я предоставил ссылку на pastebin с полными данными) Отчет об ошибке
Спасибо!
Ответ или решение
Проблема запуска JavaFX на Mac с чипом M3 и ошибки ‘AssertionFailure’ является общей среди разработчиков, которые перешли на платформу Apple из других систем, таких как Windows. Основные причины данной ошибки часто связаны с недостающими зависимостями, неправильной конфигурацией или несовместимостью версий.
Первая проблема: NSInternalInconsistencyException
Ошибка, которую вы видите, указывает на проблему с NSTrackingRectTag
, который считается недействительным. Это может произойти по нескольким причинам:
- Удаление Tracking Rect Tag: Убедитесь, что ваша программа не пытается удалить
NSTrackingRectTag
, который уже был уничтожен. - Обработка 32-битных тегов: Ошибка может быть спровоцирована приведением шоу-маркера к 32-битному значению, что происходит в кросс-платформенной среде, такой как JavaFX.
Вторая проблема: несовместимость с M3
Чипы Apple M3 представляют собой совершенно новое поколение архитектуры, что может приводить к несовместимостям, особенно если используемая версия JavaFX устарела.
- Проверка версии JavaFX: Убедитесь, что вы используете последнюю доступную версию JavaFX, совместимую с вашей версией JDK. Обычно рекомендуется зверифицировать совместимость через официальные страницы JavaFX.
- Использование JavaFX с JDK 17 или выше: Поддержка JavaFX в старых версиях JDK может быть ограниченной, особенно на новые архитектуры. Попробуйте использовать JDK версии 17 или более позднюю, как вы уже начали с OpenJDK 23.
Шаги для решения проблемы
-
Проверьте JDK и JavaFX: Убедитесь, что версия JDK (например, OpenJDK 23.0.1) совместима с вашей версией JavaFX. Для работы с JavaFX желательно использовать JDK, поддерживающий JavaFX.
-
Добавьте JavaFX библиотеки: Если вы используете Maven, убедитесь, что у вас добавлены необходимые зависимости для JavaFX в вашем
pom.xml
. Пример:<dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>23.0.1</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId> <version>23.0.1</version> </dependency>
-
Параметры VM: Активируйте необходимые параметры виртуальной машины, чтобы приложение могло корректно работать с графикой. Можете использовать следующее при запуске приложения:
--module-path /path/to/javafx-sdk-23.0.1/lib --add-modules javafx.controls,javafx.fxml
-
Отладка: Используйте параметры отладки и предложенные вами логи. Проверьте, сколько ресурсов использует ваше приложение и ищите потенциальные утечки памяти.
-
Обновление до последней версии macOS: Возможно, проблема связана с устаревшими библиотеками в системе. Обновите до самой последней версии macOS, если вы еще не сделали этого.
Подача отчета об ошибке
Если ни одно из этих действий не сработает, рекомендация будет связаться с поддержкой Oracle или сообществом JavaFX, предоставив полное описание ошибки и вашу систему. Также обязательно проверьте репозиторий GitHub JavaFX на наличие зарегистрированных проблем, похожих на вашу.
Заключение
Сложности при запуске JavaFX на Mac с архитектурой M3 могут быть вызваны различными причинами, от несовместимости версий до настроек окружения. Следуя описанным шагам, вы сможете устранить большинство причин и восстановить работоспособность вашего приложения.