Javaでiアプリを作成中にリソースからテキストファイルを読み込む方法が分からない

このQ&Aのポイント
  • 最近Javaでiアプリを作り始めた者です。リソースにあるテキストファイルを取得して、内容をそのまま画面に出すアプリを作っています。
  • Javaの初心者なので、うまくリソースからデータを取得できずに困っています。
  • IApplicationクラスからHelloWorldCanvasを呼び出す際にエラーが発生し、シンボルの解釈処理ができないというメッセージが表示されます。どうにかして解決したいです。
回答を見る
  • ベストアンサー

テキストファイルをリソースから読み込む(iアプリです)

最近Javaでiアプリを作り始めた者です。 リソースにあるテキストファイルを取得して、内容をそのまま画面に出すアプリを作っています(最終的にはゲームが作りたく、そのための練習です)。 本を読むなりしているのですが、どうしても分からないので質問させて頂きます。 import com.nttdocomo.ui.*; final class HelloWorldCanvas extends Canvas{ public void paint(Graphics g){ String aaa; MediaData d=MediaManager.getData("resource:///0.txt"); try{ d.use(); } catch (Exception e){ } aaa=d.getData(); g.drawString(aaa,0,20); } } IApplicationクラスを定義しているHelloWorld.JavaからHelloWorldCanvasを呼び出して、上のソースはHelloWorldCanvasのソースです。 これをiαppliToolでビルドすると、 C:\~\HelloWorldCanvas.java:12: シンボルを解釈処理できません。 シンボル: メソッド getData () 位置 : com.nttdocomo.ui.MediaData の インタフェース aaa=d.getData(); と出てきてしまいます。 Javaは本当に初めてなので慣れている方から見たら意味不明なことをしているかも知れませんが、どうかご回答お願いします。

  • myr
  • お礼率91% (95/104)
  • Java
  • 回答数1
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • koki_m
  • ベストアンサー率83% (45/54)
回答No.1

こんばんは。 画像やサウンドはMeidaManagerを使用してリソースにアクセスしますが、テキストファイルの場合はストリーム(リーダ)を使用します。 また、画面のタイプには「Canvas」と「Panel」があり、テキストを表示する場合は「Panel」のほうが適しています。 ↓はresフォルダ内のtest.txtにアクセスして内容をコンソールに出力します。(端末エミュレータ画面には表示しません) ================================================== import java.io.*; import javax.microedition.io.*; import com.nttdocomo.io.*; import com.nttdocomo.ui.*; public class LoadText extends IApplication { public void start() { BufferedReader in = null; try { // リソース接続処理 InputStream instream = Connector.openInputStream("resource:///test.txt"); InputStreamReader inreader = new InputStreamReader(instream); in = new BufferedReader(inreader); // テキスト読込み処理 String line = null; while((line = in.readLine()) != null) { System.out.println(line); // 標準出力 } } catch(Exception e) { e.printStackTrace(); } finally { try { in.close(); } catch(Exception e) {} } // ※例外処理は簡易的になっています。 this.terminate(); } }

myr
質問者

お礼

ありがとうございます。結構テキストの場合はややこしいのですね…。。 こっちでちょこっと変えてみて、画面に出力することも出来ました。分かりやすい説明ありがとうございました。

関連するQ&A

  • iアプリの関数(log)について

    関数(log)を計算したいのですが、MathクラスでもFastMathクラスでもうまくいきませんでした。 以下のコードだと「シンボルを解釈処理できません」とメッセージが出てコンパイルできません。何か間違っているのでしょうか。それともDojaではlogをサポートしていないのでしょうか? import com.nttdocomo.ui.*; import com.nttdocomo.ui.util3d.*; public class A extends IApplication { public void start() { float res1; res1 = FastMath.log(0.5); System.out.println("FastMathクラス**********"); System.out.println("log(0.5) = " + res1); double res2; res2 = Math.log(0.5); System.out.println("Mathクラス**********"); System.out.println("log(0.5) = " + res2); } }

    • ベストアンサー
    • Java
  • iアプリ/サイコロの作り方

    Doja5.1 J2SDK1.4.2 を使ってソースを書いています。 まずサイコロを振るプログラムを作って、そのあとサイコロの数字を画像で表示できるようなものを作りたいです。 サイコロの画像はgifで用意してあります。 まずサイコロを振るプログラムですが以下のように書きました。 しかし、エラーが出ないにも関わらずエミュレータで動きません。 どこが間違っているのかどなたか教えてください。 また、画像を表示するほうのプログラムはどこを変えれば良いでしょうか。 よろしくお願い致します。 import com.nttdocomo.ui.*; import java.util.Random; class MainCanvas extends Canvas { int dice[] = new int[8*2]; Random rnd = new Random(); boolean init_flg = false; public MainCanvas() { setSoftLabel(Frame.SOFT_KEY_1,"サイコロ"); setSoftLabel(Frame.SOFT_KEY_2,"終了"); } public void paint( Graphics g ) { if(init_flg == false) { init_flg = true; return; } g.clearRect(0,0,200,2*8*13+30); int i; for(i=0;i<8*2;i++) { g.drawString(Integer.toString(i+1)+"回目のサイコロ",0,i*13+30); g.drawString(Integer.toString(dice[i]),100,i*13+30); } } public void processEvent( int type, int param ) { if( type == Display.KEY_PRESSED_EVENT ) { if( param == Display.KEY_SOFT1 ) { int i; for(i=0;i<8*2;i++) { dice[i] = rnd.nextInt(11)+2; } repaint(); } else if( param == Display.KEY_SOFT2 ) { IApplication.getCurrentApp().terminate(); } }

    • ベストアンサー
    • Java
  • 「テキストファイルをリソースから読み込む(iアプリです) 」の続き(発展)

    先日「テキストファイルをリソースから読み込む(iアプリです)」で質問させてもらったものです。 頂いた回答と本を参考に、何とか文字列を読み込んで、","などで区切って保存するところまで出来ました。 で、それを応用させて、「リソースにマップデータが保存してあり、RPGの二次元のマップをそれを使って表現する」ことをしようと試行錯誤したのですが、上手くいきません。ソースは以下の通りです。 import com.nttdocomo.ui.*; import javax.microedition.io.*; import com.nttdocomo.io.*; import com.nttdocomo.ui.*; final class HairetuCanvas extends Canvas{ public static int[][] MAP = null; BufferedReader mread = null; char check=','; //区切り用 int mrx=0,mry=0,i=0,j=0; //マップのX,Y座標 try{ InputStream instream = Connector.openInputStream("resource:///map.txt"); InputStreamReader inreader = new InputStreamReader(instream); mread = new BufferedReader(inreader); for(mrx=0;mrx<10;mrx++){ for(mry=0;mry<10;mry++){ i = mread.indexOf(check,j); j = i; MAP[mrx][mry] = mread.charAt(j-1); } } } catch(Exception e){ e.printStackTrace(); } finally{ try{mread.close();} catch(Exception e){} } } map.txtには 9,9,9,9,9,9,1,9,9,9 1,1,9,1,1,9,1,9,1,1 … という感じで、2次元配列(みたいな)データが10行*10列で入っています。 これを","で区切って、MAP[mrx][mry]に一つずつ保存していくという流れで考えているのですが、以下のエラーがでてきます。 C:\~\HairetuCanvas.java:11: 型の開始が不正です。 try{ ^ C:\~\HairetuCanvas.java:31: <identifier> がありません。 } ^ エラー 2 個 度々聞いてしまってすみません、回答頂けたら幸いです。

    • ベストアンサー
    • Java
  • NullpointerExceptionエラー

    dojaでアプリを作成しようとしたところ下記エラーが出ました。 いろいろ調べたのですが原因がわかりません。 どなたかご教授お願いします。 ---------------- java.lang.NullPointerException at com.nttdocomo.ui.GraphicsImpl.drawImage(+75) at com.nttdocomo.ui.FrameGraphics.drawImage(+7) at C.paint(+34) at com.nttdocomo.ui.Display$1.run(+186) C ---------------- ちなみにjavaは初心者です。

    • ベストアンサー
    • Java
  • iアプリ 色変更

    初歩的質問ですが・・・ import com.nttdocomo.ui.*; public class TEST01 extends IApplication { public void start(){ MyCanvas mc = new MyCanvas(); Display.setCurrent(mc); } } class MyCanvas extends Canvas{ public void paint(Graphics g){ g.setColor(g.getColorOfName(g.AQUA)); g.fillRect(0,0,200,200); } } で、g.setColor(g.getColorOfName(g.AQUA))の部分で、 「 Graphics からの static メソッド getColorOfName(int) には静的にアクセスしてください。」 と、エラーがでます。 ですが、実行はできます。なぜ??

    • ベストアンサー
    • Java
  • private voidなメソッドはstatic コンテキストですか

    コンパイルエラーで、 「static コンテキストから参照することはできません」 と表示されます。 ソースにstaticという文字は有りません。 private voidなメソッドはstatic コンテキストですか? [Foo.java] import com.nttdocomo.ui.*; public class Foo extends IApplication {  public void start() {   Display.setCurrent(new MyPanel());  } } class MyPanel extends Panel {  private void e() {   Bar.DShow(Dialog.DIALOG_ERROR, "", "");  } } [Bar.java] import com.nttdocomo.ui.*; public class Bar {  public void DShow(int type, String title, String body) {   Dialog d = new Dialog(type, title);   d.setText(body);   d.show();  } }

    • ベストアンサー
    • Java
  • <identifier>がありません

    Javaのプログラムの勉強をやっていて、初心者なのですが、早速分からないことに当たってしまいました。 Webで調べても分かりませんでした。 どなたかご指導お願いします。 初歩的な質問ですみません。 //ソースコードの例 import com.nttdocomo.ui.*; public class while extends IApplication{ public void start(){ Dialog outDlg=new Dialog(Dialog.DIALOG_INFO,\"結果\"); int i,sum; sum=0; i=1; while(i<=10){ sum=sum+1; i=i+1; } outDlg.setText(\"合計=\"+sum); outDlg.show(); terminate(); } }

  • javaでのiアプリの画面表示について

    javaでiアプリを作成したいのですが、行きずまっています。 テキストボックスとストップウォッチを画面上に両方表示させたいのですが、下のDisplay.setCurrent(p);とDisplay.setCurrent(mainWin);のどちらかしか表示されません。 ストップウォッチは、MainWin.javaが他にありますのでしっかり起動します。 どうすれば良いでしょうか? package stopwatch; import com.nttdocomo.ui.*; public class StopWatch extends IApplication implements ComponentListener { MainWindow mainWin; TextBox textbox1; TextBox textbox2; public void start() { Panel p = new Panel(); textbox1 = new TextBox("",16,2,TextBox.DISPLAY_ANY); p.add(textbox1); textbox2 = new TextBox("(未入力)",16,2, TextBox.DISPLAY_ANY); textbox2.setEditable(false); p.add(textbox2); p.setComponentListener(this); Display.setCurrent(p); mainWin = new MainWindow(); Display.setCurrent(mainWin); } public void componentAction(Component source , int type, int param) { if(type == ComponentListener.TEXT_CHANGED && source == textbox1) { textbox2.setText(textbox1.getText()); } } }

  • javaでのiアプリの画面表示について

    javaでiアプリを作成したいのですが、行きずまっています。 テキストボックスとストップウォッチを画面上に両方表示させたいのですが、下のDisplay.setCurrent(p);とDisplay.setCurrent(mainWin);のどちらかしか表示されません。 ストップウォッチは、MainWin.javaが他にありますのでしっかり起動します。 どうすれば良いでしょうか? package stopwatch; import com.nttdocomo.ui.*; public class StopWatch extends IApplication implements ComponentListener { MainWindow mainWin; TextBox textbox1; TextBox textbox2; public void start() { Panel p = new Panel(); textbox1 = new TextBox("",16,2,TextBox.DISPLAY_ANY); p.add(textbox1); textbox2 = new TextBox("(未入力)",16,2, TextBox.DISPLAY_ANY); textbox2.setEditable(false); p.add(textbox2); p.setComponentListener(this); Display.setCurrent(p); mainWin = new MainWindow(); Display.setCurrent(mainWin); } public void componentAction(Component source , int type, int param) { if(type == ComponentListener.TEXT_CHANGED && source == textbox1) { textbox2.setText(textbox1.getText()); } } }

  • iアプリ アプリからブラウザを起動できない

    iアプリ実行中にあるキーを押すとアプリを終了しiモードで指定されたURLに繋がる処理を作りたいのですが、下記のソースを実機で試したところ「エラーが発生しました」と表示され強制終了してしまいます。 ***************************************************** switch(param){ case Display.KEY_SOFT1:   IApplication.getCurrentApp().launch(IApplication.LAUNCH_BROWSER,   new String[]{"http://~~.html"});   break; } ***************************************************** Doja4.1で実行するとコンソールにエラーらしき文字が表示されます↓ Main :java.lang.SecurityException: UseBrowser key not found in ADF test.Test java.lang.SecurityException: UseBrowser key not found in ADF java.lang.SecurityException: UseBrowser key not found in ADF 原因は何なのでしょうか?

    • ベストアンサー
    • Java

専門家に質問してみよう