アプリケーションコンパイラのエラーについて
Mostrar comentarios más antiguos
アプリケーションコンパイラを使用してアプリを作成しています.
使用しているプログラムは普通に実行するのには問題はないのですが,アプリを作成してインストールして開こうとするとインデックスが配列要素数(0)を超えていますとでで上手く実行できないのですが何が問題なのでしょうか.
9 comentarios
madhan ravi
el 15 de Jul. de 2020
Would you mind posting the code?
Kaede
el 15 de Jul. de 2020
Kaede
el 15 de Jul. de 2020
Kenta
el 15 de Jul. de 2020
how about sharing the file you made in app designer? it involves the code which returns the error.
Kaede
el 15 de Jul. de 2020
Kojiro Saito
el 15 de Jul. de 2020
@Kaedeさん
「インデックスが配列要素数(0)を超えています」のエラーがコードのどこで起きているのかが特定できます。デバッグ用にログ出力を有効化してみてどこでエラーが起きているか教えていただけますか?
コンパイルする際に「ログファイルの作成」にチェックを入れてログファイル名を入力してからパッケージ化すれば、アプリを実行時にログファイルが出力されるようになります。

コンパイルしているMushraという関数は、入力引数にコンフィグファイル名が必要になっていたりしませんでしょうか?
たとえば
function Mushra(filename)
%
end
のように。
その場合、ファイル名のパスをアプリ実行時に与える必要があります。
実行時にコマンドでファイルパスを入力させたくない場合、入力引数のfilenameを外してuigetfileでエンドユーザーにコンフィグファイルのパスを選択させる方法、パス指定で直書きするなどの方法があります。
function Mushra
[file,path] = uigetfile('*.txt');
config = readtable(fullfile(path, file));
% TBD
end
とか
function Mushra
%#exclude example_config.txt
config = readtable('example_config.txt');
% TBD
end
とかですかね。%#excludeプラグマはR2020aから使えますが、配布先でファイルを変更したりする場合にアプリにファイルを含めなくするおまじないです。
Kaede
el 16 de Jul. de 2020
Kaede
el 16 de Jul. de 2020
Kojiro Saito
el 16 de Jul. de 2020
@Kaedeさん
コメントありがとうございます。コードの一部をシェアしていただいて原因がわかりました。
vararginというのは可変入力なので、入力引数が0でも1以上でも実行できるようになっています。
ただ、コードの下記の部分で1つめの入力引数(varargin{1})がファイルパスが入力されるのが前提となっています。
config = varargin{1};
if ~exist(config, 'file')
errordlg('The configuration file you have requested does not exist.');
clear global;
return;
end
ですので、「ということなのですがこれは今実行しているような
Mushra('..\mashram1\example_config.txt')
コマンドが毎回アプリ実行時に必要ということでしょうか.」
の質問の回答としては、「必要です」となります。
「インデックスが配列要素数(0)を超えています」のエラーの原因が分かりましたので、後ほどコメント欄ではなく回答欄に解決策を書かせていただきます。
Respuesta aceptada
Más respuestas (1)
Kaede
el 16 de Jul. de 2020
0 votos
6 comentarios
Kaede
el 16 de Jul. de 2020
Kaede
el 16 de Jul. de 2020
Kojiro Saito
el 16 de Jul. de 2020
コメントありがとうございます。新しい回答としてコメントが入ってしまっていますね。回答についての返信のときは、「この回答についてコメント」から書くと同じスレッドでコメントが入りますので、ご留意ください。
追加質問①for_redistribution_files_onlyを開くと上の画像のフォルダに入っているのと異なっているのですが大丈夫ですか.
については、ファイルの拡張子が表示されていないだけですので、大丈夫です。
Windowsのエクスプローラーから、「表示」タブを開き、「ファイル名拡張子」のチェックボックスにチェックを入れれば、.batや.exeなどの拡張子も表示されるようになります。
追加質問②エンドユーザーには何を配ればよいでしょうか.
については、for_redistributionフォルダーにある、アプリのインストーラー(MyAppInstaller_web.exeやMyAppInstaller_mcr.exeのようなファイル名)をエンドユーザーに渡して、エンドユーザー側でインストーラーを実行させれば良いです。
追加質問③もしエンドユーザーに配布するときにメールで送るためどうしても容量が大きくなってしまうのですが,やはり方法としては圧縮が一番良いでしょうか.
については、ものにもよりますが、WebからMATLAB Runtimeをダウンロードさせるタイプのインストーラー(MyAppInstaller_web.exe)でしたらファイルサイズは3~5MBぐらいで済みます。メールでも添付できるサイズかと。MATLAB Runtimeもインストーラーに含めるタイプのインストーラー(MyAppInstaller_mcr.exe)でしたら、数百MB~GBぐらいになってしまいます。この場合は、One DriveとかDropboxとかのファイル共有サービスを使ったほうが良いですね。
いずれにしても、インストーラーはバイナリファイルですので、圧縮してもそれほどファイルサイズは変わらないです。
もし、エンドユーザーの方にダウンロードやインストールをさせたくない場合、同じMATLAB Compilerを使ってWebアプリにするという方法もあります。
MATLAB本体のApp Designerというツールを使ってGUIアプリを作成し、それをMATLAB CompilerでWebアプリに変換し、サーバーアプリケーションとして動かします。エンドユーザーの方はWebブラウザでURLをクリックするだけでそのGUIアプリを使うことができます。
Kaede
el 17 de Jul. de 2020
Kojiro Saito
el 17 de Jul. de 2020
・App DesignerでGUIアプリを作成
「新規作成」→「アプリ」をクリックし、App Designerツールを起動します。

ドラッグ&ドロップでGUIレイアウトを配置し、コールバックでGUIを操作したときの制御を記述します。
・GUIアプリを作り終えたら、「共有」から「Webアプリ」をクリックしてWebアプリ(ファイル拡張子はctf)に変換します。

・開発用MATLAB Web App Serverをインストール
下記のドキュメントの手順に沿って、MATLAB Compilerのインストールフォルダーに含まれている開発用MATLAB Web App Serverのインストーラーを展開先のマシンに持っていき、開発用MATLAB Web App ServerとMATLAB Runtimeをインストールします。
・開発用MATLAB Web App Serverのセットアップ
下記のドキュメントの手順に沿って開発用MATLAB Web App Serverをサービスに登録し、起動します。
・Webアプリを開発用MATLAB Web App Serverにデプロイ
Webアプリ(.ctf)を展開先のマシンのappsフォルダーに置きます。
例: C:\ProgramData\MathWorks\webapps\R2020a\apps
・エンドユーザーからWebブラウザでアクセス
エンドユーザーのPCやタブレットで、Webブラウザを開き、URLを入力します。
例えば、展開先のサーバー名がserverというホスト名の場合、
http://server:9988
でWebアプリを開けます。
必要に応じてエンドユーザーからのホスト名解決やファイアウォールでのTCPポートの開放を行う必要があります。
Kaede
el 22 de Jul. de 2020
Categorías
Más información sobre MATLAB Compiler en Centro de ayuda y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!






