2016-12-06 5 views
0

у меня есть действительно странные ошибки ... я получаю следующее:Matlab GUI ошибка обратного вызова

SWITCH expression must be a scalar or string constant. 
Error in RL_Bsp>WechselStatus (line 387) 
    switch GewichtungNutzer 
Error in RL_Bsp>togglebutton1_Callback (line 151) 
    WechselStatus(Status, Aktion, ButtonWert); 
Error in gui_mainfcn (line 95) 
     feval(varargin{:}); 
Error in RL_Bsp (line 42) 
    gui_mainfcn(gui_State, varargin{:}); 
Error in 
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)RL_Bsp('togglebutton1_Callback',hObject,eventdata,guidata(hObject)) 
Error while evaluating UIControl Callback 

Самое смешное, что я ничего не изменилось, после того, как я перезапустить мой компьютер раньше это только начало происходить где это раньше работал 10 часов назад!

Ошибок кажутся здесь:

function WechselStatus(Status, Aktion, ButtonWert) 
    GewichtungNutzer = getappdata(0,'Wert'); 
    global R_Alg 
    global Ziel 
    switch GewichtungNutzer 
     case {'100'} 
      GewichtungNutzer = 100; 
     case {'200'} 
      GewichtungNutzer = 200; 
     case {'300'} 
      GewichtungNutzer = 300; 
     case {'Ziel mit 500'} 
      GewichtungNutzer = 0; 
     otherwise 
      GewichtungNutzer = -1; 
    end  

    if get(ButtonWert,'value') == 1 
     set(ButtonWert,'Backgroundcolor','0.76, 0.87, 0.78'); 
     if GewichtungNutzer > 0 
      R_Alg(R_Alg(:,Aktion)==0, Aktion) = GewichtungNutzer; 
     else 
      R_Alg(R_Alg(:,Aktion)==0, Aktion) = 500; 
      Ziel = Aktion; 
     end 
    elseif get(ButtonWert,'value') == 0 
     set(ButtonWert,'Backgroundcolor','0.11, 0.31, 0.21'); 
     R_Alg(:, Aktion) = -1; 
    end 

и здесь

function togglebutton1_Callback(hObject, eventdata, handles) 
    Status = 1; 
    Aktion = 1; 
    ButtonWert = hObject; 
    WechselStatus(Status, Aktion, ButtonWert); 

я не получил действительно никакого понятия, почему я получаю ошибку теперь я читал много раз его что-то делать с путем что код не может прочитать gui? было бы полезно помочь !!

+2

В сообщении об ошибке сообщается, где проблема: 'GewichtungNutzer' не является скаляром или строкой. Учитывая, как вы его получаете, 'getappdata (0, 'Wert')' либо возвращает пустой массив, либо вектор. – excaza

+0

, но разве это не странно, что я ничего не изменил по сравнению с 10 ч. Назад, и я понял это сейчас, пока он работал отлично? – spr1te

+0

Если бы вы вообще ничего не изменили, может быть. Я очень сомневаюсь, что это так. – excaza

ответ

2

Эта линия:

GewichtungNutzer = getappdata(0,'Wert'); 

использует функцию getappdata для извлечения значения 'Wert', которая была сохранена в графическом объекте 0. Графическая марка 0 всегда относится к root object. Чтобы эта строка функционировала по назначению, это значение должно быть добавлено к корневому объекту сначала, используя setappdata. Если он не был инициализирован, он вернет [], что даст вам ошибку, которую вы видите при попытке использовать [] в инструкции switch.

Я предполагаю, что, когда вы ранее запускали код, значение 'Wert' было установлено на корневом объекте, и все прошло отлично. Когда вы повторно запустите код позже, это значение по какой-либо причине не было установлено на корневом объекте. Либо это значение устанавливается на корневом объекте каким-либо другим кодом, который вам нужно выполнить первым, либо есть место в вашем коде, где значение задается только при определенных условиях, которые не выполнялись во второй раз, когда вы его запускали.

Смежные вопросы