0

好的,所以我查看了有关此错误的其他问题,但没有一个适用于我的。我正在尝试将一个简单的音乐播放器包含在我的 MATLAB 程序中,但每次尝试运行它时都会出现错误

Attempt to reference field of non-structure array.

Error in Beam_Deflection_GUI_3_Music>Play_Music_Call (line 388)
n = get(S.listMusic,'Value');

Error while evaluating uicontrol Callback

我不知道为什么,但这是我的代码:

MusicChoice = {'Message in A Bottle','Roxanne'};


S.Pa4 = uipanel('title','Music',...            
          'FontSize',12,...
          'BackgroundColor','white',...
          'Units','pixels',...
          'Position',[25 80 280 425],...
          'Parent',S.fh,...
          'fontweight','b',...
          'FontAngle','italic',...
          'visible','off');
S.listMusic = uicontrol('parent',S.Pa4,...
    'style','popupmenu',...
    'String',MusicChoice);


S.Play = uicontrol('parent',S.Pa4,...
    'style','push',...
    'string','Play',...
    'units','pix',...
    'pos',[100 100 20 20],...
    'callback',@Play_Music_Call);


 function [] = Play_Music_Call(varargin) 

     S = varargin{1};
     n = get(S.listMusic,'Value');
     MusicChoice = {'Message in A Bottle','Roxanne'};
     mChoice = MusicChoice(n,1);

     [y, Fs, nbits] = wavread(mChoice);
     S.player = audioplayer(y, Fs, nbits);
     play(S.player)

 end 
4

1 回答 1

0

为了完整起见,其他人不必先阅读所有评论:

提问者将此作为解决方案发布:

好的,所以我发现当我这样做的时候 S = varargin{1}

我正在将句柄(它是双精度而不是结构)保存到S.

为了解决这个问题,我必须将回调函数嵌套在创建 GUI 的较大函数中,Beam_Deflection_GUI_3.

然后我 S = varargin{1} 从回调中摆脱了。

它现在可以工作了,因为它可以访问该S结构而无需重新保存它。

于 2012-12-13T16:07:35.990 回答