Прерывистая ошибка доступа к константе Java из MATLAB
Короткий вопрос: как мне надежно получить доступ к константе в классе Java, например, javax.swing.JCheckBox.TRAILING?
Я использую интеграцию Java MATLAB для создания графического интерфейса. Часто при настройке GUI во время модульных тестов MATLAB выдаст эту ошибку:
??? No appropriate method, property, or field TRAILING for class
javax.swing.JCheckBox.
Однако мне никогда не удавалось воспроизвести это в отладчике, и я не могу найти последовательность операций, которая будет постоянно вызывать эту ошибку. На данный момент у меня есть две открытые копии MATLAB, одна показывает ошибку, а другая работает как положено:
>> javax.swing.JCheckBox.TRAILING
ans =
11
против
>> javax.swing.JCheckBox.TRAILING
??? No appropriate method, property, or field TRAILING for class
javax.swing.JCheckBox.
Я могу показать, что MATLAB знает, что такое JCheckBox:
>> javax.swing.JCheckBox
ans =
javax.swing.JCheckBox[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@108b647,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=2,bottom=2,right=2],paintBorder=false,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=]
Я вижу, что во время состояния ошибки интерфейс SwingConstants отсутствует с помощью struct(javax.swing.JCheckBox()) для перечисления всех полей:
>> struct(javax.swing.JCheckBox)
ans =
BORDER_PAINTED_FLAT_CHANGED_PROPERTY: [1x1 java.lang.String]
MODEL_CHANGED_PROPERTY: [1x1 java.lang.String]
TEXT_CHANGED_PROPERTY: [1x1 java.lang.String]
MNEMONIC_CHANGED_PROPERTY: [1x1 java.lang.String]
MARGIN_CHANGED_PROPERTY: [1x1 java.lang.String]
VERTICAL_ALIGNMENT_CHANGED_PROPERTY: [1x1 java.lang.String]
HORIZONTAL_ALIGNMENT_CHANGED_PROPERTY: [1x1 java.lang.String]
VERTICAL_TEXT_POSITION_CHANGED_PROPERTY: [1x1 java.lang.String]
HORIZONTAL_TEXT_POSITION_CHANGED_PROPERTY: [1x1 java.lang.String]
BORDER_PAINTED_CHANGED_PROPERTY: [1x1 java.lang.String]
FOCUS_PAINTED_CHANGED_PROPERTY: [1x1 java.lang.String]
ROLLOVER_ENABLED_CHANGED_PROPERTY: [1x1 java.lang.String]
CONTENT_AREA_FILLED_CHANGED_PROPERTY: [1x1 java.lang.String]
ICON_CHANGED_PROPERTY: [1x1 java.lang.String]
PRESSED_ICON_CHANGED_PROPERTY: [1x1 java.lang.String]
SELECTED_ICON_CHANGED_PROPERTY: [1x1 java.lang.String]
ROLLOVER_ICON_CHANGED_PROPERTY: [1x1 java.lang.String]
ROLLOVER_SELECTED_ICON_CHANGED_PROPERTY: [1x1 java.lang.String]
DISABLED_ICON_CHANGED_PROPERTY: [1x1 java.lang.String]
DISABLED_SELECTED_ICON_CHANGED_PROPERTY: [1x1 java.lang.String]
WHEN_FOCUSED: 0
WHEN_ANCESTOR_OF_FOCUSED_COMPONENT: 1
WHEN_IN_FOCUSED_WINDOW: 2
UNDEFINED_CONDITION: -1
TOOL_TIP_TEXT_KEY: [1x1 java.lang.String]
TOP_ALIGNMENT: 0
CENTER_ALIGNMENT: 0.5000
BOTTOM_ALIGNMENT: 1
LEFT_ALIGNMENT: 0
RIGHT_ALIGNMENT: 1
WIDTH: 1
HEIGHT: 2
PROPERTIES: 4
SOMEBITS: 8
FRAMEBITS: 16
ALLBITS: 32
ERROR: 64
ABORT: 128
Обратите внимание, что TRAILING и все остальные SwingConstants отсутствуют. Часто в ходе попытки отладки я делаю что-то, что вызывает магическое появление SwingConstants, но этого недостаточно, чтобы предотвратить возникновение проблемы, если я вставлю ее в свой код перед использованием константы.
Я пытался установить точки останова или использовать "клавиатуру" для остановки при возникновении этой ошибки, но когда я получаю контроль, все работает нормально. Остальные тесты пройдены, и весь набор тестов пройдет, когда я перезапущу его. Я наблюдал это на R2010b и R2012a, как на Windows 32, так и на 64-битной.
Есть ли объяснение этому поведению, и как мне это исправить?