[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 07/05 19:48 / Filesize : 320 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

CLDC+MIDP+携帯電話用Javaスレッド part 3



1 名前:デフォルトの名無しさん mailto:sage [04/08/06 22:21]
J2ME CLDC+MIDPベースの携帯電話用Java(主にEZアプリ、Vアプリ)に関するスレッドです。
質問でも議論でも何でもこい、と。

前スレ:
CLDC+MIDP+携帯電話用Javaスレッド part 2
pc5.2ch.net/test/read.cgi/tech/1070858996/

過去スレ
携帯JAVAのスレッド
pc2.2ch.net/test/read.cgi/tech/1011977260/(DAT落ち)

--
Java一般に関しては:
【初心者】Java質問・相談スレ51【大歓迎】
pc5.2ch.net/test/read.cgi/tech/1091770298/

NTT DoCoMoのiモード携帯電話用Java(iアプリ)については:
iモード携帯電話用Java(iアプリ) Part 6
pc5.2ch.net/test/read.cgi/tech/1091286071/

>>2-5あたりにリンク集

567 名前:デフォルトの名無しさん mailto:sage [04/10/26 21:34:26]
連投ごめ、多分だけどprivate static cvs cv;てしてるとこのprivateも要らないと思う
それで一回やってみそ

568 名前:デフォルトの名無しさん mailto:sage [04/10/26 21:40:31]
>>564
オレも、クラスとインスタンスとstaticについて理解し直すとこからやり直した方がいいと思う。
Javaの基本というか、オブジェクト指向の基本だし。
その調子だと、privateとpublicの違いについても怪しいな。

569 名前:デフォルトの名無しさん mailto:sage [04/10/26 21:48:36]
>>565
ごめん
学校で習った程度だから漏れの知識ショボイ
クラスとは何でとかも習ったけど小学生相手にリンゴが一個あって〜とかと同じレベル

>>566-567
言ってる部分を消してみるとエラーでエミュが落ちることは無くなった
けどが描画されない・・・

570 名前:564 mailto:sage [04/10/26 22:13:52]
>>568
装飾子の違いは分かってる…と思う
privateとpublicの違いは確か、同クラス内と制限無しだったような
staticは共有メモリ領域を利用するんだっけ…

571 名前:デフォルトの名無しさん mailto:sage [04/10/26 23:40:28]
auのPhase3.0エミュを使って通信でtxtファイルを取得しようとすると403が帰ってきます。
実機では問題ありません。サーバー側のログを見ると
実機では
con = (HttpConnection)Connector.open("aaa.jp/"+net);
のうちのnetの部分だけをGETしているのに対し、エミュレータからだと
http://から取得しようとしている、という違いがあります。
エミュレータがわの設定の問題なのか、サーバーの設定なのか通信関係の知識がないためにわかりません。
一応403の意味はググってしらべました。
それからサーバーは自宅サーバー(win)です。


572 名前:デフォルトの名無しさん mailto:sage [04/10/27 01:10:00]
>>564
MIDletとCanvasとshoriの関係ってどうなってんの?って話。
端末はアプリ実行時にMIDlet生成しようとして、通常MIDlet内でCanvasを生成して
実際の処理はCanvas内で完結するように作ると思う。
第3のインスタンス(shori)をCanvasで生成して、そいつからCanvasに再描画させるなら
 cvs(MIDlet midlet) { this.midlet=midlet; }
と同様に、shoriの中に
 shori(Canvas canvas) { this.canvas=canvas; }
としたら、このコンストラクタ後
 canvas.repaint();
で出来る。もちろんこれだけではないが、MIDlet(msc)とCanvas(cvs)の関係と同様に
Canvas(cvs)と処理役(shori)の関係を作ればいいってこと。

>>571
報告乙。え?質問なの?

573 名前:デフォルトの名無しさん mailto:sage [04/10/27 16:15:08]
>>571
403の意味より…

574 名前:564 mailto:sage [04/10/27 17:29:35]
さっき買ってきた本見ながら572さんの言ってるのを色々試してみるといけました。

コンパイラでエラー出ないし実行も問題ないんだけど
/*cvs*/の所でshori2(shoriとはベツ)のメソッド使用すると
型shori2からのstaticメソッドmethod(String)にはstaticにアクセスして下さい
と警告が出る
shori2.method(String)からstaticを取ると警告は出なくなるけど、shoriがエラー。

実行出来てるし問題はないと思うんだけどかなり気になるのでたいさくあれば教えて下さい

575 名前:デフォルトの名無しさん mailto:sage [04/10/27 18:02:24]
>574
もう分かったから晒せる範囲でソース*全部*晒せ。
いつの間にか最初は影も形もなかったshori2が出てきてるじゃないか。
この分だと「実は……」でshori3、shori4が出てきそうで付き合い切れん。
(まぁ、携帯相手に6個もクラス作ってる余裕は普通ないはずだが
それを言ったら、そもそもクラスは2つまで!!が定石なはずだし)



576 名前:564 mailto:sage [04/10/27 18:49:39]
>>575
ソースは
/*cvs*/に、
shori shori = new shori(this)
shori2 shori2 = new shori2(this)
が増えてて、cvs()[}が消えてる
/*shori*/は
static Canvas canvas;
が増えててコンストラクタがpublic shori(Canvs canvas){shori.canvas=canvas}
に変わってる
/*shori2*/は単純に受け取った文字列を無限ループで表示するメソッドがあるだけ
コンストラクタはshoriがshori2に変わってるだけで同じ
んで、メソッドが一つあるだけ
public static String testt(String str){
try{
...draw関係...
canvas.repaint()
while() ;
}catch(...){}

そんで、cvsからshori2のtestt()を呼ぶと警告がでる
呼んでる場所は/*cvs*/のshori.exet()の次の行
shori2testt(moziretu);

577 名前:デフォルトの名無しさん mailto:sage [04/10/27 19:48:54]
>576
……対策はただ一つ。
藻前さんがもう一度Javaの入門書をきっちり読んで理解すること。
それが嫌なら、警告が出続ける事実を甘んじて受け入れろ。

ちなみに「なぜか知らないけど付けたor取ったら動くようになった」って理由で
メソッドにstatic付けたり取ったりしてるようでは「入門レベルなら理解してる」
とは言えない。

578 名前:デフォルトの名無しさん mailto:sage [04/10/27 22:52:14]
対策:Java言語の入門書(携帯アプリの本じゃないぞ)でしっかり勉強する

近道は無いよ
----------------------------

次の方ドーゾ

579 名前:デフォルトの名無しさん [04/10/28 00:23:25]
なんかオートバックスにVodafone用GPSが売ってて、専用Vアプリを使えばカーナビになるって事なんだが。。。GPSとVアプリとの通信方法って公開されてるかどうか、誰かしらない?

580 名前:デフォルトの名無しさん mailto:sage [04/10/28 01:32:40]
>>579
シリアル制御してんじゃないの?
その手の話はほとんど知らんのであくまで憶測だが。

581 名前:デフォルトの名無しさん mailto:sage [04/10/28 01:41:24]
>>579
ttp://developers.vodafone.jp/dp/tool_dl/java/tech.php
それっぽいのあるけど、pdfの中までみるのはめんどい。

582 名前:デフォルトの名無しさん [04/10/29 21:31:30]
Vアプリの質問はここでいいのか分からないのですが質問です

while(true)でループ中にユーザーがソフトキーを押すと
ユーザーからの操作を受け付ける画面を出し、初めの画面に戻ってしまわないように
while(true)で操作があるまでループし続けるようにしているのですが、
両方で交互にrepaintが実行されて画面がチカチカと元の画面になったりユーザーから操作を待つ画面になったりします
そして少し時間が経つと元の画面に戻ります
戻ってきたところまではいいのですがそのまま固まってしまいどの操作も受け付けなくなってしまいます。

使用エミュレータはP6です
Threadを使用したプログラムでソフトキーを押した場合の処理はcommandAction内に書いてます。

どなたか解決策ご存知の方居ましたらご回答宜しくお願いします

583 名前:デフォルトの名無しさん mailto:sage [04/10/29 21:42:47]
書き忘れていました

呼び出し元のwhile文の中にソフトキーが押された時にだけThread.yield()を実行するようにして
ソフトキーを押した時に実行されるwhile文をfor文に変えてg.drawString("i="+i,0,0,Graphics.LEFT|Graphics.TOP)
としてみたのですがiの数値は増えて表示されるもののどの操作も受け付けませんでした

584 名前:デフォルトの名無しさん mailto:sage [04/10/29 22:10:23]
>両方で交互にrepaintが実行されて

「されて」じゃなくて、そうなるようにプログラムを組んでるんだよ
そうならないようにプログラムを書けば解決

あと、Thread.yield()の意味を勘違いしてるヤカン

585 名前:デフォルトの名無しさん mailto:sage [04/10/29 22:38:41]
repaintが交互に実行されないように、
ソフトキーを押した時の画面が出ている状態では元の画面でrepaintされないようにしてソフトキーの画面のみrepaintするようにしてみました
がチカチカと元の画面に戻ったりソフトキーを押した時の画面になったりします。

Thread.yield()の使い方間違えていたみたいなので消しました。
すみません



586 名前:デフォルトの名無しさん mailto:sage [04/10/30 02:32:00]
なんか、とてつもないわけわからん構造になってる予感。
Canvasはデフォでダブルバッファリングされてるから、
repaintが非同期に呼ばれるだけではちらつくことはあり得んと思うんだが。

情報が小出しなんであくまで想像だが、
SpriteCanvasによる画面への転送は、
たとえSpriteCanvasがDisplayableに設定されてないときにも行えるから、
SpriteCanvasの描画と「ユーザーからの操作を受け付ける画面」の描画が
交互に行われてちらついているんじゃないかな。

587 名前:デフォルトの名無しさん mailto:sage [04/10/30 14:47:33]
まだ初心者で漏れもよく分からんが、setCurrentで切り替えが一番いいんでないか?

588 名前:デフォルトの名無しさん mailto:sage [04/10/30 16:12:13]
582です

587さんの言っているsetCurrentで
ソフトキーを押した時に画面を切り替えることは出来ましたが
呼び出し先で操作を受け付ける画面を描画しても、コンパイラでは問題無しなのですがエミュだとまったく描画されませんでした。
そこで呼び出し先のクラスのextends Formを消してみるとコンパイルエラーになってしまいます。。

589 名前:572 mailto:sage [04/10/30 16:42:49]
>>588
せやから急に「extends Formを」とか出すな。消したら〜とかまるで分かってない証拠。
564にも言ったけどインスタンスの関係をハッキリさせて。
どうせソフトキー押した時とかの処理がキッチリできてないから
「元の画面でrepaintされないように」が裏目に出て再描画されてないんじゃない?
とりあえずボタン押しで確実に処理がされているかどうか分からないなら
一行ずつSystem.out.println挟んでどの行まで実行されてるか確認してみたら?
確実に再描画の行が実行されているはずなのに画面変わらないとかはその後。
素早く確実で楽に解決したいならソース丸ごとあげてくれ。

590 名前:588 mailto:sage [04/10/30 20:28:09]
>>572
過去に画面切り替えの質問があったので、
工夫すればもしかしたら動くかもしれないと思いやってみたのがFormです
コンパイラのエラー出さなくなりましたが目的の動作はしませんでした。

int flag=0;としておいて、
ソフトキー押した時にflag=1;にして
初め表示している画面でif(flag=0) repaint();などしてみたのですが効果ありませんでした。

どのような動作にすればいいのかよく分からなくなってきたので
一旦コンパイラがエラー出さなくなった状態に戻してソースをzipであげておきました
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=130
素早くなくてもいいんですけど
確実に解決したいのでよろしければ適当に修正してもらえれば幸いです

591 名前:デフォルトの名無しさん mailto:sage [04/10/30 21:40:26]
>>582
564と同一人物かよ!って別にそれはいいんだけど、
これがどうなるといいんだっけ?普通に画面の切り替えは問題なさそうだけど。

むしろやろうとしてる事がわかるならエラー有るままのほうがやりやすかったかも。

592 名前:デフォルトの名無しさん mailto:sage [04/10/30 22:58:44]
対策:Java言語の入門書(携帯アプリの本じゃないぞ)でしっかり勉強する

近道は無いよ
----------------------------

次の方ドーゾ

593 名前:デフォルトの名無しさん mailto:sage [04/10/30 23:51:28]
同一人物じゃないと思うが…。

>>590
あんま分からんケド一応見てみたが
試しに動かしたらcommand_actionのコンストラクタで呼び出してるmenu ()が実行されてない
cmdMenu押した時のdisplay.setCurrent(command_action);の行をcommand_action.menu();に変えると画面がチカチカした感じになる

590の言ってるのはこれじゃないかと思った
このチカチカするのをなくしたいと。
質問の意味勝手に妄想したケド合ってる?
まあ合ってた所でどうすればいいか俺にはわかんね

594 名前:586 mailto:sage [04/10/31 00:18:23]
>>590
ソース見させてもらったが・・・愕然とした。
こりゃ、アドバイスで何とかなる範囲じゃないと思う。

現在画面に設定されているのはどのDisplayableなのか、
今生きているThreadはどれなのか、
どのThreadがどの処理を行っているのか・行うべきなのか、
このへんを意識しないととんでもないものができあがるぞ。

つーことで、>592 に同意。
Javaの書き方というよりかは、JavaAppletなどのイベント指向を理解した方がいいと思う。


とりあえず動くだけでいいなら・・・とかアドバイスしようと思ったけど、
こんなもんをリリースされちゃかなわん。。
コンストラクタ処理をwhile(true)でブロックしたり(sleep()時に例外出てる模様)、
無駄にcvs(=Canvas)をThreadとして走らせたりしてるし、
Formを画面表示してるのに文字を(Currentな画面でない)cvsに書いてるし。

595 名前:572=591 mailto:sage [04/10/31 00:33:40]
>>593
同一だと思ったのはCanvasにcvsなんて名前つけてた部分だけど、間違ってたらスマソ。

確かにそうすりゃチカチカするね。
つーか、
冷静にソース見たらmenuでwhileループがマズイ。
メインのスレッドがmenuをずっと続けるのでcommandActionとかをやるスレッドが無い。
new Thread した奴はせっせとrunメソッドでループを続けてるだけ。
つまり2本のスレッドがwhileループに入ったままになる訳だ。
最初に「時間が経つと元に」ってのは、あんまりループ続くからフリーズとかだと。

って書いてる途中に594に先越されてしまったけど、確かに勉強は要る。
勉強したくないならあんまりややこしいことに挑戦しないってのも手かも知れんけど。



596 名前:593 mailto:sage [04/10/31 01:34:02]
ま、理解しろとか言っても普通分からん。
事実漏れは2年間も学校でjava習ったがオブジェクト指向のおの字すら分からんねーし。
未だにコピペコピペで普段使うところ以外ワカンネ

どうせ理解したって質問するような事(ネットにサンプルが流れてない)するんだったら今後使う可能性低いから覚えるだけ無駄
理解しろ言う前に質問受ける側はなんでもいいから適当にソース修正してうpしてやるのが一番かと。
そんだけ言って何もしないのは格好悪いのでうpしておいた
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=131

んであげてから気づいたから訂正
dispchange.javaのコンストラクタにあるthread_B.start()を消して
最後のほうにあるthread_A.yield()をThread.yield()
んでその次の行にthread_B.start()を追加

これで一応動きはするが画面切り替え時に一瞬白くなる
つーかこれであってるかも分からん。
警告orエラー出てないから問題はないと思うが誰か見てくれ
あと画面が白くなるのなんとか出来る人修正きぼん

597 名前:593 mailto:sage [04/10/31 01:58:04]
あ、だめだ
これだとcvsから別クラスのメソッド呼んで実行してる時にmenu押しても両方でrepaint呼ばれちゃうよ
勝手に別クラスって妄想入れたけどあってたりするかな
回避方法ワカンネので誰か分かる人よろ

別クラスとか言ってるけど何も知らない人が勝手に妄想した単語並べてるだけなんで適当に解釈してやって下さい

598 名前:572 mailto:sage [04/10/31 03:13:56]
じゃあ僕もアップしてみよ。
ttp://sterdust.net/upload/upload.cgi?page=Download&dir=&sort=date&filename=souce572.lzh
変更箇所には//572と記述
僕の経験上スレッドでループさせたりさせなかったりはフラグを使うのが普通。
canvasとcommandでisRunningフラグ作って、画面切り替えタイミングでフラグ変更。
あとstartAppでやる事消したのと、yieldさせてないのと。この辺は好みかも。

切り替わる時白くなるのは仕方ないと思う。EZエミュでは起こらなかったけど。
どちらの状態でもGraphicsに描画するなら描画は一つのCanvasに任せて
2つ以上のクラスでoffImgの内容を変えるだけにしてsetCurrentを避けると吉。
ttp://sterdust.net/upload/upload.cgi?page=Download&dir=&sort=date&filename=souce572_2.lzh
で、やってみたのが上。もう修正するなんてものじゃなくなってるけど。

599 名前:デフォルトの名無しさん [04/10/31 05:15:07]
どなたかphase 3 エミュレータをアップしていただけないでしょうか?

600 名前:デフォルトの名無しさん [04/10/31 15:00:50]
プログラムからそれが走っている端末のバージョンを
Phase3 or Notだけでいいので知るほうほうってないですか?


601 名前:588 mailto:sage [04/11/01 00:28:57]
>>593さん、>>572さん
あげて頂いたソースを参考にこちらのアプリに組み込んでみたところ、思い通りの動作をさせることが出来ました。
画面が切り替わるときに白くなるのはこちらのエミュレータでは起こりませんでした。
返事が遅くなってしまいましたがありがとうございました

602 名前:593 mailto:sage [04/11/01 21:53:22]
ちょっと質問。

ソフトキーが押されると、
今やってる処理を強制終了(?)させて処理させるところを移動させたいのだけど、
どうすればいいかな?
多重ネストからの脱出ってのは見つけたけど、
これだとbreak文とラベルの記載してる場所が違うと動かないぽい気がするので・・・。

実験もせず書いてるので「出来るに決まってるヴォケ」とか「こんな方法がある」とか、
あと「あんたの説明意味不明」とかでもいいので適当に突っ込んでください

603 名前:593 mailto:sage [04/11/01 21:59:21]
ごめん書き忘れ

ソフトキー押した時にフラグ立てて、
強制終了(?)させたい所にifでフラグ立ってたらbreakするとかだと場所が多くて、
今どこの処理やってるのか分からないから記載個所が多すぎて対処しきれない。

main(){
while(true){
//ここ
for(...){}
...
この後もfor文やらwhile文がずらずら。
...
}
}
commandAction(...){
if(c==softkey){}//←ソフトキーが押された時に上の「ここ」ってとこに処理を移したい
}

かなり意味不明な書き方になってるけどこっちの文章力が無いから勘弁
とりあえず、「ここ」って所にソフトキーを押した時に移動したいわけ。

604 名前:デフォルトの名無しさん mailto:sage [04/11/02 05:02:49]
>>602-603
キミも>>578>>592かな…

605 名前:デフォルトの名無しさん mailto:sage [04/11/02 06:55:19]
答:無理



606 名前:デフォルトの名無しさん mailto:sage [04/11/02 07:03:33]
ん?オレは例外投げて対処させたが。
まぁいわゆるgotoがあるプログラムは構造がダメだという例に当てはまるからイクナイと思う。

607 名前:デフォルトの名無しさん mailto:sage [04/11/02 07:13:33]
処理をどうする以前に、設計がまずいんじゃ

608 名前:デフォルトの名無しさん [04/11/02 09:32:37]
V601TでTextBoxのMaxSizeに指定できるのは128KBまでという制約ってあるんでしょうか。
厳密には、setMaxSizeで127*1024なら大丈夫、128*1024でアウトとなってます。

コンストラクタやsetMaxSizeでの指定→問題なし
128KB以下のStringをsetStringで入れる→問題なし
入れたTextBoxをDisplayに設定→問題なし
設定されたTextBoxで決定押して編集開始→開くとなぜかまっさら(文字数制限が0文字までになってる)
キャンセルするとsetStringで入れた文字に戻ってる、決定すると当然まっさら文字が入力される。


エミュで問題起きてなく実機(V601T)で問題起こってるんで、おそらく機種依存の現象だと思うんですが。
もし何か情報あればお願いします。。
(時間あれば私の側でも実験してみます)

609 名前:デフォルトの名無しさん [04/11/02 17:23:24]
KDDIのezplusエミュレータで、
画面サイズが最大で147*147までにしかならないのですが、
QVGAサイズを表示させることはできないのでしょうか?

610 名前:デフォルトの名無しさん mailto:sage [04/11/02 18:19:40]
32bitビットマップ形式の保存ファイルは存在しねーぞ。
PCの液晶でも24bitカラーなのに、携帯で32bitなんてあえりえねーだろ。
つーか普通16bitだし。

VRAMの制限でねーの?


611 名前:デフォルトの名無しさん mailto:sage [04/11/02 18:20:07]
うあ、激しく誤爆

612 名前:602-603 mailto:sage [04/11/02 19:39:30]
>>606
それでいけそうな気がしてきた
>>607
設計なんて何も考えてない

613 名前:デフォルトの名無しさん mailto:sage [04/11/02 22:09:18]
>609
Phase3.0対応エミュが必要。
Phase3.0対応アプリを開発する必要があるなら、
どっかからか入手できるはず。健闘を祈る。

614 名前:デフォルトの名無しさん [04/11/03 03:18:42]
Vアプリを配信するのに、ベクターからやろうと思うんだけど、
ConnectorのAPIの代わりに、ベクターで配っているJConnectorを
使用しないといけないんだけど、何度やってもclassファイルが壊れている
って、wiressToolでコンパイルする度言われる。。。。

だれか、経験者いない?

615 名前:デフォルトの名無しさん mailto:sage [04/11/05 02:24:55]
EZアプリでget(Calendar.WEEK_OF_MONTH)を使おうとすると
WEEK_OF_MONTHが解決できませんと出ます。
月の何週目かを取得することはできないのでしょうか?



616 名前:デフォルトの名無しさん mailto:sage [04/11/05 03:20:33]
CLDC1.0のCalendarにWEEK_OF_MONTHはない。
複雑な式にもならんから自力で計算すれ。

617 名前:デフォルトの名無しさん mailto:sage [04/11/07 23:56:41]
iアプリの場合、通信できるのはダウンロードしたときのサーバに限定されてるけど、
Vアプリ、ezアプリの場合ってどうなってるの??

618 名前:デフォルトの名無しさん mailto:sage [04/11/08 01:56:58]
>>617
ez -- あらかじめjadに記載したサイトのみ
V ---オフィシャル登録必要、端末内リソース利用と併用しちゃいけない。

619 名前:デフォルトの名無しさん mailto:sage [04/11/08 02:47:58]
>>618
おお、サンクス
オフィシャル登録って有料なんだねorz

620 名前:デフォルトの名無しさん mailto:sage [04/11/09 06:44:33]
(´,_ゝ`)プッこのスレで質問するレベルじゃないわな

621 名前:デフォルトの名無しさん mailto:sage [04/11/13 17:48:16]
質問します。どなたか分かる方、ご教授よろしくお願いします。

Vodafoneの携帯用のアプリを作っているんですが、
「import javax.microedition.lcdui.Canvas;」または
「import javax.microedition.lcdui.*;」を記述しても、
その他いろいろimportしても、
「getGraphics()」メソッドが使えません。コンパイルエラーが出てしまいます。
「paint()」メソッドとかは現時点のプログラムで使えているんですが。。。

「javax.microedition.lcdui.Canvas」の中には、「getGraphics()」メソッドは
存在していないのでしょうか?

そもそもgetGraphics()を使おうと思ったのは、paint()メソッド内や、
paint()メソッド内から呼び出すメソッド以外でdrawString()などを使いたかったんですが、
それをする場合、getGraphics()を使う以外に方法はあるのでしょうか?


622 名前:デフォルトの名無しさん mailto:sage [04/11/13 18:29:57]
まず>>2を見て最低限リファレンスを読むくらいはしろ。
質問はそれからだ。

623 名前:デフォルトの名無しさん mailto:sage [04/11/13 19:16:51]
リファレンスを見てみたんだが、それでもできなかった。

で、getGraphics()を使わない汚い方法を思いつきました
(インスタンス変数として作っていたGraphics型の変数(g2とする)に
paint()内で「g2 = g;」とやっておいて、プログラムの頭でrepaint()を呼ぶ)。
他の方法をご存知の方、ご教授くださいませ。

やっぱり、携帯に電話がかかってきたりして画面が壊れた時のために
画面描画はすべてpaint()内とその中から呼ばれるメソッドでやってたほうが
いいんでしょうなあ。スプライトも使ってるのでそれとの共存とか、
その時のゲーム内の状態(ウインドウを開いているとか)ごとの処理とか、
はあ〜〜めんどそう。

624 名前:デフォルトの名無しさん mailto:sage [04/11/13 19:33:45]
>>623

>>553
>>556

625 名前:デフォルトの名無しさん mailto:sage [04/11/13 21:19:35]
> リファレンスを見てみたんだが、それでもできなかった。

意味不明

> はあ〜〜めんどそう。

ストレスたまるだけだから止めたほうがいいよ



626 名前:デフォルトの名無しさん mailto:sage [04/11/13 23:03:44]
>>623
netaro.ddo.jp/techinfo/Javadoc/MIDP1.0a/html/index-all.html

627 名前:デフォルトの名無しさん mailto:sage [04/11/14 03:34:38]
doubleの値を使ってプログラム組んでみるとコンパイラで
Floating point result not allowed
com.sun.kvem.ktools.ExcecutionException: Preverifier returned 1
と言ってきてコンパイル出来ない。
浮動小数点の結果がどうとか言ってるっぽい感じなんだけどエラーの意味わかる人居ます?

628 名前:デフォルトの名無しさん mailto:sage [04/11/14 03:38:05]
>>556

629 名前:デフォルトの名無しさん mailto:sage [04/11/14 12:52:55]
>>621
Image img_back;
Graphics gra_offs;
/** Canvasクラスを継承したクラスのコンストラクタ等で取得 */
Image img_back = Image.createImage(width, height);
Graphics gra_offs= img_back.getGraphics();
protected void paint(Graphics g) {
gra_offsに対して描画
gra_offsからgにオフスクリーン転送
}

>>627
MIDPでは浮動小数点は使用できない。各携帯メーカーの拡張APIを使うか
それが嫌なら整数を100倍や1000倍にしてアプリで工夫するべし。

630 名前:629 mailto:sage [04/11/14 12:54:05]
ああ、記述ミス。
img_back = Image.createImage(width, height);
gra_offs= img_back.getGraphics();
こっちね。

631 名前:627 mailto:sage [04/11/14 15:20:27]
あれ、使えないんですか。
vfはFixedPointで使えるようですけど、+はadd()に置き換えたりしないとだめ?

632 名前:621 mailto:sage [04/11/14 15:24:27]
>626,629,630
サンクスです!

俺の言葉が足りなかったみたいです。
俺の欲しかった Graphics型は、paint(Graphics g)の方で、
g.drawString() とか g.drawLine() とかするやつのほうです。
これら drawString() やdrawLine() を、repaint() を呼んでpaint()内(やそれ以下のメソッド)でやる以外に
paint()の外でできないかなあ、と思ったのでした。

「i アプリ」を以前に作ったとき、インスタンス変数(クラス内の各メソッドの外で宣言する、staticナシの変数)に
コンストラクタで「g = getGraphics()」とやって、それ以降は、
オーバーライドするpaint()内ではいっさいなにもせず(空ブロック { } のままにしておく)、
いろんなメソッド(スコア表示・キャラ表示・背景表示などのそれぞれの各メソッド)で描画が必要になったら
前述のインスタンス変数にて g.drawString() とか g.drawLine() とかやっていたんです。
昔のBASICプログラムがいつでも画面描画ができていたので、そのノリで。

「電話がかかってきた時などの割り込みで壊れた画面を元に戻す」ということを考えていない設計でした。
その、「i アプリ」作成時に俺が使っていたgetGraphics()は 「i モード java」のCanvas クラスにあるんですが、
他の java には無いのかもしれません(626さんが見せてくれた方も違うみたいです)。
「i モード java」以外のjavaでは、「drawString() や drawLine() をしたいときは paint()内とその中から呼ぶ
メソッドでしかやってはいけない」という設計なのかもしれません。それはそれでよい方針なので、
私もそのような設計がなされたものに今作っているやつを作り変えていこうかと思ってます。

私の621の書き込みに「i モード java で以前使っていた CanvasクラスのgetGraphics() 」という記述が
抜けていたため、622,624さんをはじめ、みなさんに手間を取らせてしまいました。
どうもありがとうございました。



633 名前:627 mailto:sage [04/11/14 15:35:03]
連投すいません、
FixedPoint型では<が未定義みたいなんですが、
ifで判断を行う場合はどのようにすればいいでしょうか
整数部のみを取得して比較するのが一般的でしょうか?

634 名前:デフォルトの名無しさん mailto:sage [04/11/14 17:22:38]
>>633
(゚Д゚)ハァ?
Javaには演算子のオーバーロードなんて機能はありませんが?

635 名前:デフォルトの名無しさん mailto:sage [04/11/14 19:29:00]
>>627
>>vfはFixedPointで使えるようですけど
自分で言ってるこの点でFixedPointがボーダフォンの拡張APIだと分かってよ。
もっかいJSCLとMIDPの違いを確認してね。



636 名前:デフォルトの名無しさん [04/11/18 03:41:10]
>>623
その方法でアプリ作りましたよ。
ドコモからau&vodaの移植で描画周りを作り直す時間がなかったのでそのまま移植するためにそうしました。
auとvoda版も同時移植なのでほぼ3キャリアのソースが同じですみました。
vadaは当然スプライトは使用していません。
描画がシビアでなけれなこの方法はソースの管理がしやすいのでいいと思います。


637 名前:623 mailto:sage [04/11/18 17:10:18]
>636
そうですか。俺は今Vodaにスプライト使ってアプリ作ってるんだけど、
スプライト使わない方法に変えたほうがいいのだろうか。
「まるくん」という人も「スプライトの方が遅い」とか自分のHPで言ってたしなあ。

以下は蛇足です。
スプライト使うと、例えば着信があったとき、「アプリ再開」にすると画面が真っ白に
なるんですよ。戻ってきたときに仮想画面(BGを貼り付けたり、g.drawStringで直接書かれる画面)
を白クリアしてるんだろう。
このへんは「着信などの割り込みがあったら、仮想画面全体を書きなおす」とかに
すればいいのだろうが。
で、スプライトを使わない方法で画面描画をやってたら、割り込み後に画面を戻すのも
システムがやってくれるのかなあ、なんて想像してます。

638 名前:636 [04/11/18 17:46:39]
>>637
着信とかのイベントが発生した場合は、pauseApp()に処理が通るのでこの中で全画面の再描画要求を出します。
システムのダイアログが出た後はcanvasの画面を復帰してくれないので自分で復帰させてやらないといけません。

639 名前:623 mailto:sage [04/11/19 04:51:30]
>638
なるほど。システムは、「”自分が書く部分を退避させておいて、それを最後に戻す”とかせずに、
”書きっぱなしで終了する”」わけですね。問題のあるシステムだなあ。

サンクスです!さっそく試してみます。



640 名前:デフォルトの名無しさん [04/11/20 00:32:55]
逆コンパイルされた時にソースが見難く(?)なるツールがあるって聞いて
試してみたいんだけど、このツールがいいよってのがあったら教えて欲しいです

641 名前:デフォルトの名無しさん [04/11/20 00:39:35]
アプリを一定速度で動作させたいのですが、良い方法が分かりません。
今は以下の方法で速度を一定に見せかけていますが、
paint()にかかる時間が変動するとその分速度が狂うし、
sleepで必ず処理が待機する分、ゲームや描画の処理が損してるような
気がします。

while(true){
 try {
 Thread.sleep( 100 );
 } catch( InterruptedException ie ) { }
 repaint(); //ゲームの処理と描画
}

皆さんはどのように処理しているのでしょうか?


642 名前:デフォルトの名無しさん mailto:sage [04/11/20 01:15:58]
InterruptedExceptionの意味がわかんねから
あくまでも参考程度に

単純に、
while(true){
Thread.sleep(100);
repaint();
}
じゃ駄目なのか?

それがだめならタイマー使えば正確に測れる

643 名前:642 mailto:sage [04/11/20 01:18:24]
書いてないのに送信してしまった失礼

>>640
難読化ツールのこと?
漏れも検索してみたけど見つかんなかった
誰かよろ

644 名前:デフォルトの名無しさん mailto:sage [04/11/20 02:06:17]
Javaバイトコードなんて、
せいぜい識別子を1文字にするとかそんなレベルでしかできないと思うんだけど。

645 名前:デフォルトの名無しさん mailto:sage [04/11/20 13:56:31]
>643
>難読化ツール
ProGuardってのがフリーで使える。
ttp://proguard.sourceforge.net/

>644
携帯の場合、読みにくくすることより、まさにその
>識別子を一文字にする
ことで、classファイルが縮むことに意義があったり。



646 名前:デフォルトの名無しさん mailto:sage [04/11/20 15:21:08]
>>641
それだと処理にかかる時間が考慮されない予感。

long drawtime = 0;//前に描画した時間
long nowtime = 0; //毎回取得する時間


nowtime = System.currentTimeMillis();
if(100 <= nowtime - drawtime){
drawtime=nowtime;
ここに処理
}

とかで良いんじゃないかな。見にくくてスマソ。

647 名前:デフォルトの名無しさん mailto:sage [04/11/20 16:08:19]
serviceRepaintsはなくてもいいのか?

648 名前:640 mailto:sage [04/11/20 17:05:35]
>>645
さんくす

649 名前:デフォルトの名無しさん [04/11/22 11:23:56]


650 名前:デフォルトの名無しさん [04/11/22 16:26:32]
Vアプリの開発はじめました。教えてください。
P5型(JSCL-1.2.1)から追加されたGraphicsUtilクラスの
drawRegionメソッドをP4型(JSCL-1.1.1)で利用したいと思います。
P4型SDKのstubclasses.zipをP5型のものに上書きし、
コンパイルはできたのですが、P4型エミュレータでは
unable to load classes エラーになってしまいます。
上位のSDKで追加されたクラスを利用するにはどうすればよいのでしょうか。

651 名前:デフォルトの名無しさん mailto:sage [04/11/22 16:47:47]
>上位のSDKで追加されたクラスを利用するにはどうすればよいのでしょうか。
上位のSDKで追加されたクラスは使用できるのでしょうか?

652 名前:デフォルトの名無しさん mailto:sage [04/11/22 17:38:41]
>>650
stubclassの名の通り、SDKのクラスには実際のコードが含まれていない。
実際のコードは実行環境側にあるので、不可能。

653 名前:デフォルトの名無しさん [04/11/22 21:50:59]
>実際のコードは実行環境側にあるので、不可能。
ありがとうございます。とんちんかんな質問でした。申し訳ないです。。。
それでは、P4型で読み込んだ画像(png)を90度回転させたり、上下左右反転
させたりするにはどうすればよいのでしょうか?AppletだとPixelGrabberで
ピクセル取得して入れ替えて表示させたりしているのをみつけたのですが。
クラスを自作するとしたら、どのようにすればよいですか?

654 名前:デフォルトの名無しさん mailto:sage [04/11/23 00:02:14]
>>653
Vアプリは作ったことないが、その為にボーダではスプライトがあるんじゃね?
スプライトが嫌なら前方向に回転させたpngを用意するとか。

655 名前:デフォルトの名無しさん mailto:sage [04/11/23 00:29:52]
がんばって行列計算するとか。



656 名前:デフォルトの名無しさん mailto:sage [04/11/23 00:36:17]
90度単位なら行列計算いらんだろ。

だけど、Graphicsクラス上でピクセル単位でいじれるのはP5からなので、
P4でやろうと思うと、
>654 のスプライトか、PNG解析クラスを自作するかくらいしかないんじゃないかな。

657 名前:デフォルトの名無しさん mailto:sage [04/11/23 12:09:48]
潔くPNG解析汁

658 名前:デフォルトの名無しさん mailto:sage [04/11/23 12:20:29]
てか自前でPNG解析クラスなんか作って容量大丈夫なのか?

659 名前:デフォルトの名無しさん mailto:sage [04/11/23 18:31:40]
回転画像用意する分より小さく作るなら意味あるな

660 名前:656 mailto:sage [04/11/23 22:27:05]
オレは、容量よりも手間が気になるが。
んなことぐーたら考えてる間に、90/180/270回転した画像くらい用意できてしまうわな。

>653
どう対処するかは、どんなアプリをどういう形で配布するのが目的かによるんじゃないかな。
特に制約ないなら「P5以上です」と割り切れるし、
ゲーム配布ならスプライトにしてしまった方が楽だし、
とりあえず完成させるのが先ならPNGを4種類回転分だけ用意した方がいいし、
似たようなアプリを今後大量に作らなきゃいけないのならPNG解析クラスを作るのにも意義があるし。

661 名前:デフォルトの名無しさん mailto:sage [04/11/24 03:24:30]
VアプリをEZ向けに移植しようとしているんだけど
エミュだと遅すぎて途中で止まったようになってしまう
これ実機だとちゃんと動いてくれたりする可能性ある?


662 名前:デフォルトの名無しさん mailto:sage [04/11/24 08:56:53]
バグって止まってるんじゃないの?

663 名前:デフォルトの名無しさん [04/11/24 09:37:26]
653です。まずスプライトでやってみます。
PNG解析の方は、もう少し勉強してから挑戦してみます。
みなさま、ありがとうございました。


664 名前:デフォルトの名無しさん mailto:sage [04/11/24 13:00:29]
>>661
エミュの速さは
EZphase3対応エミュ>Vアプリエミュ>(壁)>配布中のEZエミュ
ですのでPhase3対応を探すかMIDP1.0のみで作ってVエミュで試すとイイデスヨ。
止まるのは大概メモリ不足関連。デカイのつめば少しはマシかも。

665 名前:デフォルトの名無しさん mailto:sage [04/11/24 22:43:55]
Vエミュ今月verUpしたやつはスピードも上がってるよ



666 名前:デフォルトの名無しさん [04/11/25 13:59:54]
Unofficial "MID Profile-1.0" API Reference
どこでみれるか教えてください。

667 名前:デフォルトの名無しさん mailto:sage [04/11/25 15:25:41]
VjavaP6で質問です。

例えば、画面の切り替えなどで徐々にブラックアウト。
現画像捨てて取得。
徐々にブラックイン(?)という処理で
ブラックアウトとブラックインしたいのですがどうすれば良いのでしょうか?

使えそうなメソッドとかUtilも無さそうです。

元々基幹系をやっていたもので畑違いのDisplayやらThreadに白黒させながらやってます。
どなたか教えていただけないでしょうか?

>>179の日本語APIリファレンスが開けないのですがこちらの在り処もご存知でしたら教えていただけないでしょうか?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<320KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef