アプリケーションコンパイラのエラーについて
Ältere Kommentare anzeigen
アプリケーションコンパイラを使用してアプリを作成しています.
使用しているプログラムは普通に実行するのには問題はないのですが,アプリを作成してインストールして開こうとするとインデックスが配列要素数(0)を超えていますとでで上手く実行できないのですが何が問題なのでしょうか.
9 Kommentare
madhan ravi
am 15 Jul. 2020
Would you mind posting the code?
Kaede
am 15 Jul. 2020
Kaede
am 15 Jul. 2020
Kenta
am 15 Jul. 2020
how about sharing the file you made in app designer? it involves the code which returns the error.
Kaede
am 15 Jul. 2020
Kojiro Saito
am 15 Jul. 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
am 16 Jul. 2020
Kaede
am 16 Jul. 2020
Kojiro Saito
am 16 Jul. 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)を超えています」のエラーの原因が分かりましたので、後ほどコメント欄ではなく回答欄に解決策を書かせていただきます。
Akzeptierte Antwort
Weitere Antworten (1)
Kaede
am 16 Jul. 2020
0 Stimmen
6 Kommentare
Kaede
am 16 Jul. 2020
Kaede
am 16 Jul. 2020
Kojiro Saito
am 16 Jul. 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
am 17 Jul. 2020
Kojiro Saito
am 17 Jul. 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
am 22 Jul. 2020
Kategorien
Mehr zu MATLAB Compiler finden Sie in Hilfe-Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!






