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}

構造体ではなく double であるハンドルを に保存していましたS

これを回避するには、GUI を作成するより大きな Function にコールバック関数をネストする必要がありましたBeam_Deflection_GUI_3

S = varargin{1} 次に、コールバックからを取り除きまし た。

S再保存せずに構造体にアクセスできるため、機能するようになりました。

于 2012-12-13T16:07:35.990 に答える