メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

構造体配列を使用した Java 電話帳アプリケーションの作成

R2026a

この例では、MATLAB® 関数を呼び出して構造体配列を変更する Java® パッケージを作成し、電話帳アプリケーションを実装します。

ファイル

MATLAB 関数makephone.m
MATLAB 関数の場所matlabroot\toolbox\javabuilder\Examples\PhoneExample\PhoneDemoComp\
Java コードの場所matlabroot\toolbox\javabuilder\Examples\PhoneExample\PhoneDemoJavaApp\getphone.java

手順

  1. MATLAB に付属している PhoneExample フォルダーを作業フォルダーにコピーします。

    copyfile(fullfile(matlabroot,'toolbox','javabuilder','Examples','PhoneExample'),'PhoneExample')

    MATLAB コマンド プロンプトで、作業フォルダー内の新しい PhoneExample\PhoneDemoComp サブフォルダーに移動します。

  2. 関数 makephone.m を確認します。

    function book = makephone(friends)
    book = friends;
    for i = 1:numel(friends)
        numberStr = num2str(book(i).phone);
        book(i).external = ['(508) 555-' numberStr];
    end

    この関数は、構造体配列を入力として受け取り、それを変更してから、変更後の配列を出力として提供します。

  3. 次の情報を使用して、Java パッケージ コンパイラ アプリまたは compiler.build.javaPackage で Java パッケージをビルドします。

    フィールド値
    Java パッケージ名phonebookdemo
    クラス名phonebook
    コンパイルするファイルmakephone.m

    たとえば、compiler.build.javaPackage を使用している場合は、以下を入力します。

    buildResults = compiler.build.javaPackage('makephone.m', ...
    'PackageName','phonebookdemo', ...
    'ClassName','phonebook');

    詳細については、Java パッケージの生成と Java アプリケーションのビルドの手順を参照してください。

  4. MATLAB 関数にアクセスするアプリケーションのソース コードを記述します。

    この例のサンプル アプリケーションは PhoneExample\PhoneDemoJavaApp\getphone.java にあります。

    /* Necessary package imports */
    import com.mathworks.toolbox.javabuilder.*;
    
    import phonebookdemo.*;
    
    /*
     * getphone class demonstrates the use of the MWStructArray class
     */
    class getphone
    {
        public static void main(String[] args)
        {
            phonebook thePhonebook = null;     /* Stores magic class instance */
            MWStructArray friends = null; /* Sample input data */
            Object[] result = null;    /* Stores the result */
            MWStructArray book = null; /* Output data extracted from result */
            
            try
            {
                /* Create new magic object */
                thePhonebook = new phonebook();
                
                /* Create an MWStructArray with two fields */
                String[] myFieldNames = {"name", "phone"};
                friends = new MWStructArray(2,2,myFieldNames);
                
                /* Populate struct with some sample data --- friends and phone numbers */
                friends.set("name",1,new MWCharArray("Jordan Robert"));
                friends.set("phone",1,3386);
                friends.set("name",2,new MWCharArray("Mary Smith"));
                friends.set("phone",2,3912);
                friends.set("name",3,new MWCharArray("Stacy Flora"));
                friends.set("phone",3,3238);
                friends.set("name",4,new MWCharArray("Harry Alpert"));
                friends.set("phone",4,3077);
                
                /* Show some of the sample data */
                System.out.println("Friends: ");
                System.out.println(friends.toString());
                
                /* Pass it to a MATLAB function that determines external phone number */
                result = thePhonebook.makephone(1, friends);
                book = (MWStructArray)result[0];
                System.out.println("Result: ");
                System.out.println(book.toString());
                
                /* Extract some data from the returned structure */
                System.out.println("Result record 2:");
                System.out.println(book.getField("name",2));
                System.out.println(book.getField("phone",2));
                System.out.println(book.getField("external",2));
                
                /* Print the entire result structure using the helper function below */
                System.out.println("");
                System.out.println("Entire structure:");
                dispStruct(book);
            }
            catch (Exception e)
            {
                System.out.println("Exception: " + e.toString());
            }
            
            finally
            {
                /* Free native resources */
                MWArray.disposeArray(result);
                MWArray.disposeArray(friends);
                MWArray.disposeArray(book);
                if (thePhonebook != null)
                    thePhonebook.dispose();
            }
        }
        
        public static void dispStruct(MWStructArray arr) {
        	System.out.println("Number of Elements: " + arr.numberOfElements());
        	//int numDims = arr.numberOfDimensions();
        	int[] dims = arr.getDimensions();
        	System.out.print("Dimensions: " + dims[0]);
        	for (int i = 1; i < dims.length; i++)
        	{
        		System.out.print("-by-" + dims[i]);
        	}
        	System.out.println("");
        	System.out.println("Number of Fields: " + arr.numberOfFields());
        	System.out.println("Standard MATLAB view:");
        	System.out.println(arr.toString());
        	System.out.println("Walking structure:");
            java.lang.String[] fieldNames = arr.fieldNames();
            for (int element = 1; element <= arr.numberOfElements(); element++) {
                System.out.println("Element " + element);
                for (int field = 0; field < arr.numberOfFields(); field++) {
                	MWArray fieldVal = arr.getField(fieldNames[field], element);
                	/* Recursively print substructures, give string display of other classes */
                	if (fieldVal instanceof MWStructArray)
                	{
                    	System.out.println("   " + fieldNames[field] + ": nested structure:");
                    	System.out.println("+++ Begin of \"" + 
                                                  fieldNames[field] + "\" nested structure");
                		dispStruct((MWStructArray)fieldVal);
                    	System.out.println("+++ End of \"" + fieldNames[field] +
                                                                      "\" nested structure");
                	} else {
                    	System.out.print("   " + fieldNames[field] + ": ");
                        System.out.println(fieldVal.toString());          		
                	}
                }
            }
        }
    }

    プログラムにより次が実行されます。

    • 例の電話帳データを表す構造体配列を MWStructArray を使用して作成する。

    • プロッター クラスを thePhonebook オブジェクトとしてインスタンス化する:

      thePhonebook = new phonebook();

    • makephone メソッドを呼び出し、追加フィールドを追加することで構造体の変更コピーを作成する:

      result = thePhonebook.makephone(1, friends);

    • try-catch ブロックを使用して例外をキャッチして処理する。

  5. MATLAB で、PhoneExample\PhoneDemoJavaApp フォルダーに移動します。

  6. 生成された phonebookdemo.jar パッケージをこのフォルダーにコピーします。

    たとえば、compiler.build.javaPackage を使用した場合は以下を入力します。

    copyfile(fullfile('..','PhoneDemoComp','phonebookdemojavaPackage','phonebookdemo.jar'))
  7. コマンド プロンプト ウィンドウで、cd を使用して PhoneDemoJavaApp フォルダーに移動します。

  8. javac を使用して getphone アプリケーションをコンパイルします。

    • Windows® の場合、次を入力します。

      javac -classpath "matlabroot\toolbox\javabuilder\jar\javabuilder.jar";.\phonebookdemo.jar getphone.java
    • UNIX® の場合、次を入力します。

      javac -classpath "matlabroot/toolbox/javabuilder/jar/javabuilder.jar":./phonebookdemo.jar getphone.java

    matlabroot は、MATLAB または MATLAB Runtime のインストール フォルダーへのパスに置き換えてください。たとえば、Linux® でのパスは /usr/local/MATLAB/R2026a のようになります。

  9. getphone アプリケーションを実行します。

    • Windows の場合、次を入力します。

      java -classpath .;"matlabroot\toolbox\javabuilder\jar\javabuilder.jar";.\phonebookdemo.jar getphone
    • UNIX の場合、次を入力します。

      java -classpath .:"matlabroot/toolbox/javabuilder/jar/javabuilder.jar":./phonebookdemo.jar getphone

      メモ

      アプリケーションを Mac 64 ビット プラットフォームで実行する場合は、Java コマンドに -d64 フラグを追加する必要があります。

    getphone プログラムにより、次の出力が表示されます。

    Friends: 
    2x2 struct array with fields:
        name
        phone
    Result: 
    2x2 struct array with fields:
        name
        phone
        external
    Result record 2:
    Mary Smith
    3912
    (508) 555-3912
    
    Entire structure:
    Number of Elements: 4
    Dimensions: 2-by-2
    Number of Fields: 3
    Standard MATLAB view:
    2x2 struct array with fields:
        name
        phone
        external
    Walking structure:
    Element 1
       name: Jordan Robert
       phone: 3386
       external: (508) 555-3386
    Element 2
       name: Mary Smith
       phone: 3912
       external: (508) 555-3912
    Element 3
       name: Stacy Flora
       phone: 3238
       external: (508) 555-3238
    Element 4
       name: Harry Alpert
       phone: 3077
       external: (508) 555-3077
    

参考

|

トピック