Matlab: как законно закрыть программу?

У меня есть работающий скрипт со множеством графических дескрипторов, которые я обновляю тут и там в коде. Моя цель состоит в том, чтобы, когда я закрываю программу жестоко (кнопкой X или Ctrl C), закрыть ее правильно.

Я переопределил функцию закрытия по умолчанию, но иногда я все еще получаю сообщение «Недопустимый дескриптор объекта» при ее нажатии или при нажатии Ctrl + C.

У меня много ручек в коде, надо проверять каждую или есть другой метод закрытия фигуры и кода правильно? (Что-то вроде «выйти», но без закрытия IDE Matlab).

Спасибо, Гай.


person Guy Wald    schedule 26.03.2013    source источник


Ответы (1)


Вы можете проверить действительность handle с помощью isvalid. Вы должны перебрать свои дескрипторы, проверить их правильность и закрыть их, если они действительны; вам, вероятно, также следует бросить try...catch туда для хорошей меры. Что-то типа:

function figure1_DeleteFcn(hObject, eventdata, handles)
    errList = [];
    for nHndl = 1:length(handles.myHandles)
        if isvalid(handles.myHandles(nHndl))
            try
                delete(handles.myHandles(nHndl));
            catch err
                errList = [errList err];
            end
        end
    end

    if length(errList) == 1
        error([mfilename ':ErrorClosingUI'], 'Error closing UI : %s', errList.message);
    elseif length(errList) > 1
        % Should probably do something smarter with the error messages here
        error([mfilename ':ErrorClosingUI'], 'Multiple errors occurred closing UI');
    end
person wakjah    schedule 26.03.2013