Прерывистая ошибка доступа к константе 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-битной.

Есть ли объяснение этому поведению, и как мне это исправить?

0 ответов

Другие вопросы по тегам