板が違ったらすいません・・・。
C言語ではなくMIDPにのっとってauのアプリを作っております。
デバック環境だと画像が表示されるのですが
吐き出されたjarファイルでは画像が表示されません・・・。
なぜでしょうか?
どうやっても解決できないです・・・
toolbar.exe
携帯アプリについて midp
Re:携帯アプリについて midp
そうです><
ただPC上でいくつかプロジェクトを作ったことがあるのですが
あるプロジェクトだけデバック環境で動くのに
吐き出されたファイルをPC上でクリックすると画像がないんです・・・
以下ソースです。
game.java
gameCanvas.java
//////////
画像はresに入っております。
png三枚 それぞれ48*48
ただPC上でいくつかプロジェクトを作ったことがあるのですが
あるプロジェクトだけデバック環境で動くのに
吐き出されたファイルをPC上でクリックすると画像がないんです・・・
以下ソースです。
game.java
import javax.microedition.lcdui.*; import javax.microedition.midlet.*; //(本体) public class game extends MIDlet { //コンストラクタ public game() { //キャンバスの指定 KeyCanvas c = new KeyCanvas(); Display.getDisplay(this).setCurrent(c); //スレッドの実行 (new Thread(c)).start(); } //アプリの開始 public void startApp() { } //アプリの一時停止 public void pauseApp() { } //アプリの終了 public void destroyApp(boolean flag) { } }////////////////////////
gameCanvas.java
import javax.microedition.lcdui.game.*; import javax.microedition.lcdui.*; import java.util.*; //キー入力の処理(キャンバス) class KeyCanvas extends GameCanvas implements Runnable, CommandListener { private int keyEvent = -999; //キーイベント private int keyState; //キー状態 private Command[/url] command = new Command[2];//コマンド int SelPx = 96; int SelPy = 96; int[/url][/url] MapArray = { {0,0,0,0,0}, {0,1,2,1,0}, {0,2,2,2,0}, {0,1,2,1,0}, {0,0,0,0,0} }; //コンストラクタ KeyCanvas() { //キーイベントの抑制 super(false); } //実行 public void run() { //グラフィックスの取得 Graphics g = getGraphics(); //画像ファイルの読み込み Image Moon = null; Image Sun = null; Image Select = null; try { Moon = Image.createImage("/tuki.png"); Sun = Image.createImage("/taiyo.png"); Select = Image.createImage("/select.png"); } catch (Exception e) { System.out.println(e.toString()); } //コマンドの生成 command[0] = new Command("速", Command.SCREEN, 0); command[1] = new Command("遅", Command.SCREEN, 1); //コマンドの追加 addCommand(command[0]); addCommand(command[1]); //コマンドリスナーの指定 setCommandListener(this); while (true) { //キーイベントの処理 if (keyEvent == FIRE) { int x = SelPx / 48; int y = SelPy / 48; // ↑ if (MapArray[y - 1][x] == 1) { MapArray[y - 1][x] = 2; } else if (MapArray[y - 1][x] == 2) { MapArray[y - 1][x] = 1; } // ← if (MapArray[y][x-1] == 1) { MapArray[y][x-1] = 2; } else if (MapArray[y][x-1] == 2) { MapArray[y][x-1] = 1; } // × if (MapArray[y][x] == 1) { MapArray[y][x] = 2; } else if (MapArray[y][x] == 2) { MapArray[y][x] = 1; } // → if (MapArray[y][x+1] == 1) { MapArray[y][x+1] = 2; } else if (MapArray[y][x+1] == 2) { MapArray[y][x+1] = 1; } // ↓ if (MapArray[y+1][x] == 1) { MapArray[y+1][x] = 2; } else if (MapArray[y+1][x] == 2) { MapArray[y+1][x] = 1; } } if (keyEvent == UP) SelPy -= 48;//上キー if (keyEvent == DOWN) SelPy += 48;//下キー if (keyEvent == LEFT) SelPx -= 48;//左キー if (keyEvent == RIGHT) SelPx += 48;//右キー keyEvent = -999; //キー状態の処理 /* keyState = getKeyStates(); // if ((UP_PRESSED & keyState) != 0) SelPy -= 48;//上キー if ((DOWN_PRESSED & keyState) != 0) SelPy += 48;//下キー if ((LEFT_PRESSED & keyState) != 0) SelPx -= 48;//左キー if ((RIGHT_PRESSED & keyState) != 0) SelPx += 48;//右キー */ if (SelPx < 48) { SelPx = 48; } else if (SelPx > 48 * 3) { SelPx = 48 * 3; } if (SelPy < 48) { SelPy = 48; }else if(SelPy > 48*3){ SelPy = 48 * 3; } //描画 g.setColor(255, 255, 255); g.fillRect(0, 0, getWidth(), getHeight()); for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { if (MapArray[j] == 1) { g.drawImage(Moon, j*48, i*48, Graphics.LEFT | Graphics.TOP); } else if (MapArray[j] == 2) { g.drawImage(Sun, j * 48, i * 48, Graphics.LEFT | Graphics.TOP); } } } g.drawImage(Select, SelPx, SelPy, Graphics.LEFT | Graphics.TOP); flushGraphics(); //スリープ try { Thread.sleep(50); } catch (Exception e) { } } } //キープレスイベント public void keyPressed(int keyCode) { if (keyCode == 0) return; switch (getGameAction(keyCode)) { case FIRE: keyEvent = FIRE; break;//選択キー case UP: keyEvent = UP; break;//選択キー case DOWN: keyEvent = DOWN; break;//選択キー case RIGHT: keyEvent = RIGHT; break;//選択キー case LEFT: keyEvent = LEFT; break;//選択キー } } //コマンドイベント public void commandAction(Command c, Displayable disp) { /* if (c == command[0]) speed = 10; if (c == command[1]) speed = 5; */ repaint(); } }
//////////
画像はresに入っております。
png三枚 それぞれ48*48
Re:携帯アプリについて midp
Moon = Image.createImage("/select.png");
Sun = Image.createImage("/taiyo.png");
Select = Image.createImage("/select.png");
なっておりますが気にしないでください。
添付物が現在の環境なのですが
デバックと吐き出されるものがどうやっても違います・・・
なぜなのでしょうか・・・?
どなたか本当に助けてください・・・
Sun = Image.createImage("/taiyo.png");
Select = Image.createImage("/select.png");
なっておりますが気にしないでください。
添付物が現在の環境なのですが
デバックと吐き出されるものがどうやっても違います・・・
なぜなのでしょうか・・・?
どなたか本当に助けてください・・・
Re:携帯アプリについて midp
私はAUユーザーではないのでテストできないので申し訳ないです。
ただ、ちょっと試していただきたいのですが、画像をPNGからGIFやJPGに変更しても駄目でしょうか?
昔、ドコモ携帯用のアプリを開発した際にPNGはサポートされていなかったように思いましたので…
的はずれな回答だったら申し訳ないですが(^_^;)
ただ、ちょっと試していただきたいのですが、画像をPNGからGIFやJPGに変更しても駄目でしょうか?
昔、ドコモ携帯用のアプリを開発した際にPNGはサポートされていなかったように思いましたので…
的はずれな回答だったら申し訳ないですが(^_^;)
Re:携帯アプリについて midp
質問をするときは開発環境を明記してください。
今回はアプリゲットのオープンアプリ開発講座で使用されている
JDK1.5 と J2ME Wireless Toolkit 2.2を使用しているとして回答します。
直接的な原因はファイル名の大文字小文字です。
ファイルでは、「tuki.PNG」と「taiyo.PNG」が大文字になっており
プログラムでは「tuki.png」と「taiyo.png」が小文字で指定しているため
画像の作成に失敗し、drawImageでnullを指定しているので、フリーズしています。
デバッグ環境のときは、ファイルの大文字小文字が無視されているのでしょう。
その他気になった点がありましたので以下にあげます。
・jadファイルおよび、マニフィストファイルがUTF-8ではなく、S-JISで記述されている
・jarファイル内にThumbs.db(隠しファイル)がある(動作に問題があるわけではないが、無駄に容量がとられる)
J2ME Wireless Toolkit 2.2はjadファイルとマニフィストファイルをS-JISで記述しているので
UTF-8に修正する手順としては
1.MANIFEST.MFをテキストエディタ開き、UTF-8にエンコードして保存する
2.jarファイルをWinRARで開き、META-INF/MANIFEST.MFに先ほどのMANIFEST.MFを上書きする
3.jadファイルをテキストエディタで開き、「MIDlet-Jar-Size」の値を書き換え、UTF-8にエンコードして保存する
以上です。
今回はアプリゲットのオープンアプリ開発講座で使用されている
JDK1.5 と J2ME Wireless Toolkit 2.2を使用しているとして回答します。
直接的な原因はファイル名の大文字小文字です。
ファイルでは、「tuki.PNG」と「taiyo.PNG」が大文字になっており
プログラムでは「tuki.png」と「taiyo.png」が小文字で指定しているため
画像の作成に失敗し、drawImageでnullを指定しているので、フリーズしています。
デバッグ環境のときは、ファイルの大文字小文字が無視されているのでしょう。
その他気になった点がありましたので以下にあげます。
・jadファイルおよび、マニフィストファイルがUTF-8ではなく、S-JISで記述されている
・jarファイル内にThumbs.db(隠しファイル)がある(動作に問題があるわけではないが、無駄に容量がとられる)
J2ME Wireless Toolkit 2.2はjadファイルとマニフィストファイルをS-JISで記述しているので
UTF-8に修正する手順としては
1.MANIFEST.MFをテキストエディタ開き、UTF-8にエンコードして保存する
2.jarファイルをWinRARで開き、META-INF/MANIFEST.MFに先ほどのMANIFEST.MFを上書きする
3.jadファイルをテキストエディタで開き、「MIDlet-Jar-Size」の値を書き換え、UTF-8にエンコードして保存する
以上です。
Re:携帯アプリについて midp
バグ様
本当です><
いろんなサイトを見てみたら書いてありました。
一つの情報として役立たせていただきます。
GPGA様
なおりました><
なんでPNGになっていたのでしょうかねw
気になった点について、了解しました。
いろいろと教えていただきありがとうございました。
一応、実機上では表示できました。
ただデバック上では問題ないのですが実機で
pngの透過部分を白と判定してしまう(透過されない)のですが
これはしょうがないのでしょううか?
本当です><
いろんなサイトを見てみたら書いてありました。
一つの情報として役立たせていただきます。
GPGA様
なおりました><
なんでPNGになっていたのでしょうかねw
気になった点について、了解しました。
いろいろと教えていただきありがとうございました。
一応、実機上では表示できました。
ただデバック上では問題ないのですが実機で
pngの透過部分を白と判定してしまう(透過されない)のですが
これはしょうがないのでしょううか?
Re:携帯アプリについて midp
>pngの透過部分を白と判定してしまう(透過されない)のですが
>これはしょうがないのでしょううか?
pngの色がフルカラーになっているので256色に減色して試してみてください
>これはしょうがないのでしょううか?
pngの色がフルカラーになっているので256色に減色して試してみてください
Re:携帯アプリについて midp
減色?できていないかもしれないのですが
かなりファイルサイズを小さくしました。
ただそれでも表示できなかったので
図形の描画でセレクトを補う?ようにしました。
これでも実機上でのみ透過されませんでした。
友人(midpに関しては素人)に聞いたところ機種が対応してないのではといわれました。
使っている機種 W54S
画像編集 PhotoShopCS3 AC(正式版)です。
PhotoShopだとどうやってもフルカラーで保存されてしまいませんか?
かなりファイルサイズを小さくしました。
ただそれでも表示できなかったので
図形の描画でセレクトを補う?ようにしました。
これでも実機上でのみ透過されませんでした。
友人(midpに関しては素人)に聞いたところ機種が対応してないのではといわれました。
使っている機種 W54S
画像編集 PhotoShopCS3 AC(正式版)です。
PhotoShopだとどうやってもフルカラーで保存されてしまいませんか?