Ошибка калькулятора MATLAB GUI

Я разрабатываю калькулятор, который преобразует назад и вперед из юлианского времени в стандартное время IRIG, используя MATLAB GUIDE. При запуске калькулятор работает нормально в одном направлении или в начале в другом, но каким-то образом что-то удаляется при переходе туда и обратно в одном и том же сеансе. Я использую только две кнопки, и вот как выглядит код для обратных вызовов этих двух кнопок:

% --- Executes on button press in convertjulian.
function convertjulian_Callback(hObject, eventdata, handles)
% hObject    handle to convertjulian (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
value = handles.isec;

day = floor(value/86400);
remainder = (value/86400 - day)*86400;

hour = floor(remainder/3600);
remainder = (remainder/3600 - hour)*3600;

min = floor(remainder/60);
sec = (remainder/60 - min)*60;

set(handles.jday,'String',day);
set(handles.jhour,'String',hour);
set(handles.jmin,'String',min);
set(handles.jsec,'String',sec);

Вот другой обратный вызов:

% --- Executes on button press in convertirig.
function convertirig_Callback(hObject, eventdata, handles)
% hObject    handle to convertirig (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
seconds=handles.jday*86400+handles.jhour*3600+handles.jmin*60+handles.jsec;
set(handles.isec,'String',sprintf('%0.3f',seconds));

И вот ошибка, которую я получаю в MATLAB, когда я его запускаю:

Ошибка при использовании handle.handle / set Недействительный или удаленный объект.

Ошибка при преобразовании времени> convertjulian_Callback (строка 124) set (handles.jday, 'String', day);

Ошибка в gui_mainfcn (строка 96) feval (varargin {:});

Ошибка преобразования времени (строка 42) gui_mainfcn (gui_State, varargin {:});

Ошибка в @ (hObject, eventdata) timeconversion ('convertjulian_Callback', hObject, eventdata, guidata (hObject))

Ошибка при оценке обратного вызова uicontrol


person Fobos13    schedule 11.01.2013    source источник


Ответы (1)


Вы обрабатываете дескрипторы как числовые значения. Чтобы получить значение из handles.isec, вы можете использовать:

value = str2double(get(handles.isec, 'String'));

Все ручки 'j' будут похожи.

person shoelzer    schedule 11.01.2013
comment
Я изменил все на метод get вместо прямых дескрипторов, теперь он даже не рассчитывает в одну сторону. Если это помогает, вот фрагмент одного из обратных вызовов текстового поля: - person Fobos13; 12.01.2013
comment
функция jday_Callback (hObject, eventdata, обрабатывает) day = str2double (get (hObject, 'String')); if (isnan (день)) set (hObject, 'String', 0); errordlg ('Введите число', 'Ошибка'); конец handles.jday = день; guidata (hObject, дескрипторы); - person Fobos13; 12.01.2013
comment
похоже, мне нужно вместо этого использовать сеттеры ... спасибо, моя проблема теперь решена! И да, str2double () тоже спасибо. - person Fobos13; 12.01.2013