トップページgamedev
559コメント205KB

Javaアプレットのゲームの限界は!

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。01/11/08 23:35ID:kmeAWDum
PCのブラウザで出来ることは全てやりつくされた?
なんか凄いの作れないの?
もう携帯だけの過去の遺物?
0299名前は開発中のものです。04/01/19 15:27ID:snVCA4Sa
>>298
スレ立てといてなんでここで聞いてるんだよ
0300名前は開発中のものです。04/01/21 00:26ID:j6QTKwUD
海外のサイトだけど、
http://www.javagameplay.com/games.html
とか。
あまり面白くはないけど、すげーなと思う。
0301名前は開発中のものです。04/01/21 02:01ID:JJmOkv2J
漏れも海外のサイト紹介しちゃうぞ
http://www.classicgaming.com/jmsxemu/
0302名前は開発中のものです。04/01/21 09:01ID:j6QTKwUD
紹介されているページを見る限りでは、
グラフィックスに関してはほぼ何でも出来るが、
音まわりの処理が苦しい?
0303名前は開発中のものです。04/01/22 21:10ID:sEG1ecAb
http://www1.jawink.ne.jp/koji-y/

既にでてるかな?
0304名前は開発中のものです。04/01/23 01:56ID:hxTgIGSZ
何回かチャレンジしたけど、
ヘリも飛行機も操縦がムズ過ぎ。速いマシンほど速く動いてる?
もっと簡単だったら楽しいような…

じゃ、更に追加で、
http://www2.odn.ne.jp/~cdh88520/pfsa_top.html
同じサイト内だけど、
http://www2.odn.ne.jp/~cdh88520/starship_battle_shimulator_top.html
も。
下のは複雑すぎでした…
0305名前は開発中のものです。04/01/25 01:26ID:hok/ATwA
このすれっどをみて
ぼくは
じゃばよりふらっしゅのほうがいいんだなと
おもいました。
0306名前は開発中のものです。04/02/10 01:23ID:roXOg29f
>>305
そう思ったなら多分それが正解。
適材適所。
0307名前は開発中のものです。04/05/12 17:29ID:+KwjynEM
http://www15.tok2.com/home/sitappa/java/runner/exrunner.html
0308名前は開発中のものです。04/05/15 11:19ID:atd2UrGF
おお、久しぶりの書き込みだな。
せっかくの書き込みなのにすまないんだが、

>>307
すまん、全然たいしたことない。
ってゆーか、ほとんど正男じゃん。
もっと凄いjavaゲームはないものか。
0309名前は開発中のものです。04/06/07 18:19ID:KZ9AiAg4
ゲームの限界というより作り手の限界…
0310名前は開発中のものです。04/06/21 18:11ID:uNmG74S6

ttp://java.sun.com/j2se/1.4/ja/docs/ja/guide/sound/programmer_guide/contents.html

JAVAサウンドプログラマーズガイド
0311名前は開発中のものです。04/06/21 18:50ID:WQ1GKg6I
>>307のゲームは一体何もどきなんだろう?
0312名前は開発中のものです。04/09/27 00:03:41ID:aLBna6ae
質問です。
Javaアプリでゲーム作ってますが、どうしても逆コンパイルかけられて
ソースを覗かれるのがいやなのです。
何か良い方法はありませんか?
0313名前は開発中のものです。04/09/27 00:41:30ID:be/ifB4A
難読化とかすればいいんじゃね?

もしくは、すべてのクラスファイルを独自で暗号化して、
自前の複合化クラスローダー無しには読み取れなくして、
そのクラスローダーの使い方を難しく&難読化して、読めなくするとか。


以下、参考までに。

jarg - 最適化ツール
ttp://jarg.sourceforge.net/

RetroGuard配布サイト(英語) - 難読化ツール
ttp://www.retrologic.com/retroguard-main.html

RetroGuard日本語解説サイト?
ttp://mascot.mis.ous.ac.jp/horb-ous/ihorb/RetroGuardData.htm

Java無関係用語集 - 難読化について
ttp://www.netgene.co.jp/java/technicalTerms.html#Obfuscation
0314名前は開発中のものです。04/09/27 00:42:36ID:be/ifB4A
マルチだったのか・・・
0315名前は開発中のものです。04/09/27 07:34:52ID:aLBna6ae
>>313
ご親切に、ありがとです。
早速、jargで難読化したり、jodeで逆コンパイルして確かめてみたり
してみました。
・・ん〜、簡単に覗けてしまいました。

根本的な解決方法としては、
>すべてのクラスファイルを独自で暗号化して、
>自前の複合化クラスローダー無しには読み取れなくして、
>そのクラスローダーの使い方を難しく&難読化して、読めなくする
かもしれません。是非、もう少し掘り下げて教えていただきたいです。
0316名前は開発中のものです。04/09/27 07:51:00ID:MzHevRDp
ttp://java.sun.com/j2se/1.4/ja/docs/ja/api/java/lang/ClassLoader.html
0317名前は開発中のものです。04/09/27 19:28:31ID:n84gmfqB
>>315
jarg で最適化すれば、それなりに読みにくくなっているはず。

難読化ツールは、逆コンパイルを不可能にするんじゃなくて、
逆コンパイルされても、読みにくくて解読したくなくなるように出来るって事。

昨日言い忘れてたけど、jmangle って難読化ツールもある。 結構、サクッと使えていい感じ。

Jmangle 配布サイト
ttp://www.elegant-software.com/software/jmangle/


> 根本的な解決方法としては、
> > すべてのクラスファイルを独自で暗号化して、
> > 自前の複合化クラスローダー無しには読み取れなくして、
> > そのクラスローダーの使い方を難しく&難読化して、読めなくする
> かもしれません。是非、もう少し掘り下げて教えていただきたいです。

この説明で分からないなら、ちょっと解説に時間がかかりそうだが・・・どうするか・・・
まぁ、自分も近いうちに、これをやってみようと思ってたから、まとめてみるかも。


つーか、マルチ('A`)イクナイ
0318名前は開発中のものです。04/09/30 22:22:50ID:oihGIM+f
やっぱマンドクセ
0319名前は開発中のものです。04/09/30 22:36:30ID:SJALzkxF
Web開発ではやったことあるけど、ゲーム作る程度でやる気ないなぁ。
どうせ、作るつもりないだろうけど。
0320名前は開発中のものです。04/10/02 13:58:02ID:mB8JJc6Y
これが一番手っ取り早いのでは!?
>>http://pc5.2ch.net/test/read.cgi/tech/1060340560/152
03212504/10/03 01:54:29ID:clInMJlt
>>320
JNIか。
確かに手っ取り早いかもしれないけど、ネイティブ 絡むとマンドクセ。


>>315
見てるかどうか知らないけど、まとめてみた。

ttp://potage.s58.xrea.com/wiki/wiki.cgi?page=CipherClassLoader

とりあえず脳内にあるのをメモっただけだから意味不明かもしれないが、まったり考えていく予定。
実際に作るかどうかは分からん。
0322名前は開発中のものです。04/10/03 01:58:11ID:clInMJlt
ぐはぁっ _/\○_
名前が…
032331504/10/03 12:02:03ID:drsRfI5F
>>321
毎日拝見しております・・。
321さんのHP覗いてみたのですが、インスタンスをClassクラスで生成する際の問題は、
newInstanceメソッドで引数なしでnewした後、初期化処理を行うメソッドを呼び出すようにすれば良いかと。
それとも、別のクラスにコンストラクタの引数に渡したいオブジェクトをsetterメソッドで登録しておけば、
引数なしのコンストラクタ内でその値をgetterメソッドで取り出すルールを
設ければうまくいくのではないでしょうか?
暗号化する・しないはクラス設計時に判断しないと無理ですけど。
出来れば、呼び出す側で暗号化ロジックを通す通さないで、ハンドリングできれば
便利で良いのですが。
クラスの直列化や複製もインタフェースをあらかじめ実装しないと
例外が発生するから別に当たり前の実装方法かも。
032431504/10/03 12:32:06ID:drsRfI5F
続き
内部クラスもクラスファイルをロードしないと無理です。
032532104/10/03 13:53:25ID:aFzOfy+1
ってか、シリアライズでちょっと思ったんですけど、
暗号化したいクラス(以下A)のメソッドを定義したインターフェイス(以下AI)を用意して、
A をシリアライズでファイルに書き出して、その時暗号化しとく。

んで、読み込み時に AI にキャストすればソースに手を加えなくても、
なんとかなりそうな気がする。
032632104/10/03 14:37:14ID:t6nSKj1T
なんか思いつきで書き込みしてしまったけど、
本質的なコンストラクタの呼び出しの問題は全く解決してないですね^^;

> newInstanceメソッドで引数なしでnewした後、初期化処理を行うメソッドを呼び出すようにすれば良いかと。
コンストラクタでしか呼べないモノの問題が出てくるのではないでしょうか?(super とか。)

> それとも、別のクラスにコンストラクタの引数に渡したいオブジェクトをsetterメソッドで登録しておけば、
> 引数なしのコンストラクタ内でその値をgetterメソッドで取り出すルールを
> 設ければうまくいくのではないでしょうか?
これなら、いけそうな気がしなくもないですね。
いろいろと面倒な感じになりそうですが、現実的かと。

> 出来れば、呼び出す側で暗号化ロジックを通す通さないで、ハンドリングできれば
> 便利で良いのですが。
暗号化したクラスも、暗号化していないクラスも同じように呼べるって事でしょうか?

> クラスの直列化や複製もインタフェースをあらかじめ実装しないと
> 例外が発生するから別に当たり前の実装方法かも。
頭悪いのでよく理解できません(;´д`)
申し訳ない。

> 内部クラスもクラスファイルをロードしないと無理です。
やはりそうですか・・・


ってか最初、マルチやってたので、ぶっちゃけ見くびってましたが
意外に実力のある方のようでつね。 ごめんなさい&内定ください。(何
032731504/10/03 16:44:18ID:Ab3yDh7p
>>326
> クラスの直列化や複製もインタフェースをあらかじめ実装しないと
> 例外が発生するから別に当たり前の実装方法かも。
説明へたくそですみません。
クラスをシリアライズする時、Serializableインタフェースが実装していないと
NotSerializableException例外が発生。
複製するときも、Cloneableインタフェースを実装していないと、
CloneNotSupportedException例外が発生。
なので、暗号化させたいクラスにも暗号化に必要なメソッドや変数を定義してある
暗号化インタフェースを実装していないと
"暗号化インタフェースが見つからない"例外を発生させて、
コンパイル時に開発者に警告をうながす事も使いづらいの反面
合理的なのかなと思ったわけです。
032832104/10/03 18:19:21ID:l36e1OTn
>>327
なるほどなるほど。そういう意味でしたか ^^;
しかし、そうなると疑問なのは、実装どうなるのかなぁ?と。

自分の中では、

・クラスファイルをデコンパイルさせたくないぜ。
・専用クラスローダーでしか読めなくすればいい。
・コンストラクタの呼び方が面倒になっちゃった。
・暗号化対応ソース自動変換ツールで、暗号化を意識しなくても大丈夫なシステムを!
・自動置き換えの、置き換え方を考えるぞ〜

って流れなので。

暗号化インターフェイスで暗号化を制御するとなると、実装はどうなるんだろう?って思うわけです。
暗号化インターフェイスを実装していたら、暗号化する?
暗号化するのは誰?
com.sun.tools.javac.main.Main を使って自力で暗号化コンパイラを作る?

みたいな。
0329名前は開発中のものです。04/10/05 00:20:10ID:vzG1Y+sw
>>328
その前に一つ問題があるのですが、独自で実装したクラスが独自で実装した
インタフェースをimplementsしていた場合、どうやってクラスオブジェクトを
ClassLoaderから取得できるのでしょうか?
インタフェースだけならClassオブジェクトを取得出来るのですが、
インタフェースを実装したクラスの場合では、NoClassDefFoundError例外が発生します。
0330名前は開発中のものです。04/10/05 01:03:07ID:2w/Bi/QR
Javaアプレットって、やっぱりサーバにプログラムを置いていても
クライアントから持っていかれて逆コンパイルされるんだよね?
0331名前は開発中のものです。04/10/05 01:07:54ID:vzG1Y+sw
>>330
なので、逆コンパイルできないネイティブコードでClassLoaderクラスを
独自実装するか、それとも、逆コンパイルされても解読が難しくなるように
ソースを難読化するかのどちらかに分かれて検討しているところです。
0332名前は開発中のものです。04/10/05 12:43:28ID:pyJtAE+Y
クラスローダをネイティブコード?
アプレットならデフォだとセキュリティでひっかかるんじゃないの?

署名したりインストールの手間とか考えると
普通にアプリケーションベースでネット経由でJNIをまぜつつ
ダイナミックにクラスをロードするほうが便利な気がするんだが
0333名前は開発中のものです。04/10/05 13:06:55ID:J9uCsa2u
どんな暗号使っても
その独自クラスローダを勝手に呼び出されたら
それで終わりだと思うんだけど。

結局ユーザ側で実行できるってことは
どっかで普通のバイトコードに落ちるんでしょ?
それを読む方法が何かしらあるわけで
033432104/10/05 14:53:07ID:UnlMJM9l
>>329
すみません。今のところ全て机上論なので実際のところは分かりません。
今から実際にソース書いて実験します(´д`;)

>>333
独自クラスローダーのインスタンスの作成の仕方を難読化すればいいと考えています。

沢山の偽者コードの中に本物を一つ書いてスパゲッティーにしたり、
さらに難読化ツールでメソッド名なんかを変えると、読めなくなると思います。
また、ダミークラスローダーなんかも、いくつか作れば、どれが本物なのか分からず
解読を諦めるのではないでしょうか?
藁の中から針を探す難しさだと思います。

アプリケーションの中身とは全く違う部分で労力をかけますが ^^;
033533304/10/05 15:45:56ID:J9uCsa2u
>>334
いや、同じことだと思うよ

ClassLoader#(String,byte[],int,int)に
ブレークポイント張ってデバッガで実行されたら
アウトなんじゃないの?
033632104/10/05 16:37:25ID:oJqqTbhC
ぐはっ!!!
そうっすね…少々焦点が狭かったか…

あと、

new Exception().printStackTrace();

とか、コードに埋め込まれたら
処理の流れが分かるって事も、今思い出しますた。

工夫しても解読されるのは時間の問題か…

モウダメポ('A`)
033732104/10/05 16:51:04ID:oJqqTbhC
RMI 使ってインスタンスを取得すれば大丈夫そうな…
うーん。サーバーが常に動いてないとダメだけど。
0338名前は開発中のものです。04/10/05 17:00:29ID:pyJtAE+Y
そこまで暗号化が必要なアプレットのゲームってのはそうそう多くない希ガス
033932104/10/05 17:43:10ID:oJqqTbhC
まぁ、アプレット限定の話しではありませんです。
0340名前は開発中のものです。04/10/05 18:28:28ID:pyJtAE+Y
>>321
このスレの名前をいってみろ
034132104/10/05 18:37:44ID:oJqqTbhC
放置・過疎スレ。
0342名前は開発中のものです。04/10/05 21:51:30ID:qIq4WQNz
>>339
いきなりスレの前提からはずれとるがなw
それならJAVA使わずネイティブコードでやる方がより良さそうだし
0343名前は開発中のものです。04/10/05 21:57:58ID:u1RKRDG3
リバースエンジニアリングをどうしても防ぎたいのなら、ネイティブコードを吐く言語を使用したほうが良い希ガス。
0344名前は開発中のものです。04/10/05 22:38:11ID:pyJtAE+Y
ネイティブなバイナリでもそのプログラマとコンパイラの癖わかれば
それなりに簡単にわかるぞい

あたりがつけばどんどん加速度的に分かるものだ

クラックされるくらい関心度の高いゲームが作れるかどうかのほうが重要だと思うんだがね
034532104/10/05 23:10:54ID:oJqqTbhC
>>342
> いきなりスレの前提からはずれとるがなw

>312 で逆コンパイルを防ぎたいとのマルチ質問があり、
俺がうっかりマジレスしたのが始まりで、それからは逆コンパイルを防ぐ話題でした。
>>312 以降、アプレットの話しは一切してないっす。
人も全然いないみたいだし、問題ないか、と思って。

>>343
そりゃそうだけど・・・_| ̄|○

>>344
> クラックされるくらい関心度の高いゲームが作れるかどうかのほうが重要だと思うんだがね
ごもっとも。


どこかのスレで、

実行できるものを配るということは
暗号化したファイルと、複合化のキーを一緒にして配るようなものだから。
いくら暗号化しても防ぐのは無理。 解析されるのも時間の問題。

って読んだ希ガス。今、思い出した。
0346名前は開発中のものです。04/10/05 23:55:58ID:2w/Bi/QR
解析されるのが手間になる方向しかないわけね。
0347名前は開発中のものです。04/10/06 22:03:14ID:dUtJtg+D
難読化ってそういうことだからなぁ。

先進的なアイデアなら特許取れるし。
昔なら実行時書き換えって技もあったけど、いまどき現実的でないしなぁ。

どうやって難読化しようかって考えるより、一行でもコード書いたほうが
自分のためになるんだよな。

.NET用のは結構いいのがあるようなのだが。

乱文失礼
0348名前は開発中のものです。04/10/06 22:22:02ID:CQVHxZ5S
>昔なら実行時書き換えって技もあったけど、いまどき現実的でないしなぁ。
VM依存言語だと実行時中間言語生成ってな話かねぇ。

>.NET用のは結構いいのがあるようなのだが。
確かに。
Javaな方面ではサイズ縮小だけが狙いで、本来の意味での難読化の要求が少ないのかも。
0349名前は開発中のものです。04/10/06 22:34:27ID:WwhPAGcr
test
0350名前は開発中のものです。04/10/06 22:44:22ID:Em+Tmfm5
まぁ10年くらい前から開発されてきたものだしなぁ
0351名前は開発中のものです。04/10/06 23:04:15ID:ekr4P7Le
Java Pressのvol35に、難読化とクラスローダーについて書いてあった。
RetroGuardか何かが、クラス名やメソッド名をaとかbにするみたいだが、
クラスサイズを犠牲にしても、a05470210303とかの方が難読化にならないかな、
と思ったが、リファクタリングで変換一発か。
035231204/10/07 00:34:57ID:SXGuxMIT
>>351
詳細希望。ま、買えばいっか。

Javaアプレットでは無い時点で論外ですが、自分の作っている
ゲームアプリはJavaWebStartを使用しています。
なぜか、メインフレームの部分が解読不可能でした。
jodeとかmochaで試したのですが、エラー起きちゃいます。
そんな訳で当分は検討しなくてもよいかな〜と考えている所です。
勝手ながら、この件のレスはここでクローズと言うことで。
0353名前は開発中のものです。04/10/07 01:32:11ID:WcODZ6m5
変なフォーマットのclassファイルを作って
MSのVMでは動くけどSunのjavapではエラーが
出るようにしてたアプレットがあったなー

たしかkomplexのデモだったと思うけど
0354名前は開発中のものです。04/10/07 01:42:39ID:+NyIBcQo
クラスファイルのバージョンに対応してないとか
0355名前は開発中のものです。04/10/07 02:05:51ID:7BhZIGQ/
webstartはアプレットとアプリケーションとあるから
一応また次元の違う話ではある

あとメインフレームってのが独自用語か?
なんとなくわかるが
035631204/10/07 02:36:24ID:SXGuxMIT
>>354
いえいえ。jodeで試した結果では、Java1.4でclassファイルを普通に認識しました。
ですが、複数のクラスを読み込んだうち、ソースに変換するものと例外が発生するものと様々でした。
例外はjodeパッケージに含まれている独自の例外クラスでしたので、詳細は分かりません。

>>355
>webstartはアプレットとアプリケーションとあるから
WebStartってアプレットでも配布可能でしたっけ?

>メインフレームってのが独自用語か?
すいません、これは、mainメソッドを実装しているFrameクラスの継承クラス
の事を指します。
0357名前は開発中のものです。04/10/07 11:01:50ID:7BhZIGQ/
webstartアプレットってしらんかね
JNLPしらべてみそ

ちなみに新しいウインドウが出てブラウザから独立するので
ブラウザを終了させてもいいとかそういう感じ

もはやアプレットである利点はさほどないけど
すでにアプレットになっているやつをwebstartにするならそれなりに価値もあるのかも
あとはinsetsを気にしなくていいくらいかな

もちろんいろいろなやりとりはJNLPAPIでやるというのもかわらない
0358名前は開発中のものです。04/10/10 11:51:36ID:RlxkQKMF
>>357
webstartを起動したときに、クライアント側にアプレットのモジュールを
DLしておき、ブラウザを自動で起動した後で、クライアントにDL
したモジュールを読み込ませるって事ですか?

単純にブラウザを起動するアプリをjnlpのAPIを使って実装し、
ブラウザ側ではアプレットを配置してあるページを表示させる
だけであるなら、webstartはあまり関係が無いような。
jnlpAPIでブラウザを起動するとき、何か利点あるのでしょうか?

0359名前は開発中のものです。04/10/10 14:23:36ID:2gZf+UVq
WebStartは

・ブラウザを閉じても起動したままで終了処理とか管理が楽
・JNLPAPIでローカルの資源を(デフォで警告は出るが)比較的危険のない範囲で使える
・キャッシュ処理によりアプレットのように毎回ロードしない
・細かいVMのバージョンチェックが可能
・2回目からはデスクトップやランチャーのショートカットでブラウザに関係なく起動できる

質問の意味がちょっとわからないが
URLClassLoaderを勉強するといい

これを使えばスタンドアロンのJavaアプリケーションでもバージョン管理とかが可能
これで俺はシステムたくさん組んでいる

ゲームでもjarファイルを別管理することによりゲーム本体と拡張部分を分けて管理が可能
RPGならソーサリアンとかのシステムとシナリオを分けるとかSTGだとコアと面データを分けるとか
0360名前は開発中のものです。04/10/10 15:07:46ID:RlxkQKMF
>>359
質問はwebstartって何?
では無くて、
質問はwebstartappletって何?
です。

私も、webstartで2DRPGを作っています。
0361名前は開発中のものです。04/10/10 19:15:39ID:2gZf+UVq
jnlpファイルの書式みてみろ
普通のアプレットを指定できる

利点はWebstartのAPIが使えるなど上に書いたのと同じだ
0362名前は開発中のものです。04/10/10 19:36:52ID:7+4TU6CI
アプレットも署名すれば、ローカルPCにアクセスできるよね。
0363名前は開発中のものです。04/10/10 20:13:16ID:inJquGiH
署名ってどうやるの
0364名前は開発中のものです。04/10/10 20:25:04ID:RlxkQKMF
webstart経由でアプレットが起動されれば、
クラスローダーやセキュリティマネージャがwebstartに依存されているため、
アプレットの時のようなややこしい設定プロセスを簡略化できる。

ということは、アプレットプログラム内でコンソール出力したり
すれば、webstartにログ出力されるという事か。

もし、そうだとしたら、使えるかも。
やりたいことがあるが、ちょっとセキュリティ上無理かと思っていたことが
可能になるかも・・。(独り言)
0365名前は開発中のものです。05/02/22 18:59:11ID:KzKSqXlr
やっぱりみんなそこまでしてソースを隠したいんだよね。
だから参考にしようとソース探しても全然ない。
結局掲示板で質問房が増える。
なんだかな〜。
0366名前は開発中のものです。2005/03/28(月) 02:49:42ID:kEg8t2iM
ってなわけで、作ってみました。
03673672005/04/04(月) 01:42:44ID:29VrGWc9
こんな感じになりましたが、どうでしょう?
>>http://gbsaga.ddo.jp/netgame/dillema/cliant/Dillema.jnlp

0368名前は開発中のものです。2005/08/02(火) 10:06:22ID:T+awd9IP
保守
0369π2005/12/14(水) 00:42:07ID:au/Ihpoc
質問です。
Linux環境でアプレットのアニメーションを作っています。
ダブルバッファリングしているのにちらついています。
どこかの大学の講義のページでダブルバッファリングするとこうなる、っていう例を見てもちらついているようなので、LinuxとNetscapeで実行するのに何か問題があるのでしょうか?
不思議なことにアプレットビューワの上でマウスを動かし続けていると非常になめらかに動き続けます。
カーソルを止めるとまた、たまにカクッカクッと止まります。
なんなんでしょう?アプレットビューワの上でカーソルを動かしてる間はなめらかってのは…。
0370名前は開発中のものです。2005/12/14(水) 03:26:56ID:UOIsfffY
>>369
ソース公開汁。
アプレットビューワはそんなに信用しないほうがいい。
ブラウザでは出来ない動作が可能だからだ。

0371名前は開発中のものです。2005/12/14(水) 09:22:28ID:VHYWcMtd
Flash 8.5が出たらJavaアプレットは今度こそ死ぬな。
0372π2005/12/14(水) 12:46:00ID:au/Ihpoc
ありがとうございます。そうなんですか。アプレットビューワは信用できないんですか?
実際に何が起こっているのかはわかりませんが、外見上は、たまにrepaint飛ばしてるんじゃないかって感じで、
一瞬止まったように見えるのです。で、カカカカカカカカカカクッカカカカカカカカカクッカカカカカカと…
マウスカーソルをアプレットビューワの上で動かしてると、凄くなめらかなアニメーションになって
スーと動きます。ずっとこんな風に動けばいいのに…。普通のことしか書いてませんがソースはこんな感じです。
0373π2005/12/14(水) 12:46:39ID:au/Ihpoc
//RunnableをimplementしているAppletのサブクラス内です。
public void start(){
super.start();
image = createImage(width, height);
/*オフスクリーンのGraphics*/
preg = image.getGraphics();
if(thread == null){
thread = new Thread(this);
thread.start();
}
}
public void stop(){
thread = null;
}
0374π2005/12/14(水) 12:47:50ID:au/Ihpoc
public void run()
{
Thread thread0 = Thread.currentThread();
/*whileの条件式は丸移しですがこれでいいのか気になります*/
while(thread == thread0){
try{
thread0.sleep(50);
}
catch(InterruptedException e){
}
/*
ここにパラメータの変更
*/
repaint();
}
}
public void update(Graphics g){
paint(g);
}
public void paint(Graphics g){
preg.clearRect(0, 0, width, height);
/*
ここに描画の部分draw****(preg, *****)って感じ
*/
g.drawImage(image, 0, 0, this);
}
0375名前は開発中のものです。2005/12/14(水) 20:39:46ID:cJCmSJXT
repaint()の直後に、再描画が行われる訳じゃないんですよ。
描画イベントをイベントキューに入れるだけなんですね。
イベントキューから描画イベントが取り出された時点で、初めて描画されるのですね。
そのスレッドのタイミングによっては、複数のrepaint()がある特定のコマで
一緒にされたり、故にあるコマでのrepaintが飛ばされてしまうのですね。
マウスカーソルを動かすと、システムから連続でrepaintが発送されるので
タイムラグがなくなり、スムーズに描画できるのです。故に解
0376π2005/12/14(水) 21:00:58ID:au/Ihpoc
なるほどX11だとXFlushしないといけないのと同じなのですね。
納得です。
ありがとうございました。
0377名前は開発中のものです。2005/12/14(水) 21:15:58ID:7r834BYR
どういたしまして
0378名前は開発中のものです。2006/02/07(火) 02:44:56ID:YcqHXq4X
「アプレットの読み込みに失敗しました。」
コンソールには
「************.classが見つかりません。」
と書いてあります。
デスクトップ上ではアプレットがちゃんと動作するのですが、
同じファイル(jarファイルとhtmlファイル)をアップロードしてから読み込むと見つからないと言われます。
どのような間違いが考えられるでしょうか?
0379名前は開発中のものです。2006/02/09(木) 01:59:14ID:2XaB8tQa
winSCPで転送するときに、
バイナリとか、テキストとか、なんか削除するとか設定が問題なのかなぁ。
転送後の画像がめちゃめちゃになったりしている…。
0380名前は開発中のものです。2006/02/09(木) 02:18:23ID:KZsev84P
文字変換して転送してるのかよ
0381名前は開発中のものです。2006/02/09(木) 03:30:00ID:2XaB8tQa
転送モードがテキスト、バイナリ、自動(特定の拡張子のファイルはテキストモード)とあって、
テキストモード、バイナリモード試してもうまくいかない。
サイズも変わってなさそうだし…。
自分のPC上では動くし…。
0382名前は開発中のものです。2006/02/09(木) 11:25:08ID:A4OVcy5n
その自分のPC上でhttpでとってくるようにはやってみたの?
0383名前は開発中のものです。2006/02/09(木) 18:17:46ID:2XaB8tQa
やったことないんですが、
それはhttpサーバをインストールして、
そこにファイルを置いてアクセスするってことでしょうか?
サーバを介すと状況が変わってくる可能性があると…。
0384名前は開発中のものです。2006/02/09(木) 19:10:26ID:A4OVcy5n
その状況が変わるかどうかをみないとなんとも

コードがおかしい可能性が高いわけだし

初心者でもhttp鯖立ち上げるのに一番楽なのは
NetBeansのようにTomcatこみのIDE使うあたりか
0385名前は開発中のものです。2006/02/10(金) 07:41:28ID:GjTMzduU
フォルダの配置とか実行コマンドとかもう少し詳しく書いてください。あとアプレットのhtmlファイルの<applet>の内容とか。
0386名前は開発中のものです。2006/02/10(金) 10:06:44ID:8daTPLyQ
マジスレ返してるし。
ボケろよつっこめねぇ!
0387名前は開発中のものです。2006/02/10(金) 11:16:22ID:8p7psy6q
まずhtmlファイルは、
<body>
<applet archive="piyo.jar"
code="hoge.class"
width=500 height=400>
</applet>
</body>
で、自分のPC上で実行するとIEの下のバーに「アプレット hoge started」と表示されてちゃんと動きます、
htmlとpiyo.jarを同じフォルダにアップロードしてhtmlを開くと「例外:java.lang.NullPointerException. java アプレットの読み込みに失敗しました..」あるいは、「アプレット hoge notinited」と出ます。
もう少しいろいろ調べてみます。
0388名前は開発中のものです。2006/02/10(金) 11:54:55ID:8p7psy6q
また387ですが、
hogeはHogeの間違いでした。
あと、実験でHello Worldもアップロードしてみたら動きました。
両方Linuxからscpコマンドで転送しました。
386さんはもし単純なミスに気づいてたら教えてください。
0389名前は開発中のものです。2006/02/10(金) 14:02:02ID:GjTMzduU
IE使えるならツール>SunのJavaコンソールに何かエラーの詳細が表示されてませんか?
0390名前は開発中のものです。2006/02/10(金) 17:36:59ID:8p7psy6q
表示されています。
java.lang.ClassNotFoundException: Hoge.class at sun.applet.AppletClassLoader.findClass(Unknown Source)…
Caused by: java.io.IOException: open HTTP connection failed. at sun.applet.AppletClassLoader.getBytes(Unknown Source)…
Exception in thread "Thread-9" java.lang.NullPointerException at sun.plugin.util.GrayBoxPainter.showLoadingError(Unknown Source)…
java.lang.NullPointerException at sun.plugin.util.GrayBoxPainter.showLoadingError(Unknown Source)
Exception in thread "thread applet-Ex2b_RotateEarth.class" java.lang.NullPointerException at sun.plugin.util.GrayBoxPainter.showLoadingError(Unknown Source)
やはり HTTP connection failed がポイントでしょうか。
0391名前は開発中のものです。2006/02/10(金) 17:40:29ID:hccRquls
HTTPブロックしてるのかよ
0392名前は開発中のものです。2006/02/10(金) 18:06:52ID:8p7psy6q
詳しくよろ
0393名前は開発中のものです。2006/02/11(土) 01:52:51ID:QWiuJU/z
ヒント:codebase
0394名前は開発中のものです。2006/02/11(土) 02:24:35ID:tfXfazFi
codebase属性は同じディレクトリに配置する場合省略できる
とあったので省略しています。書いてもうまくいきません。
それともなにか別のプログラムが必要なのでしょうか…。
0395名前は開発中のものです。2006/02/11(土) 03:36:41ID:tfXfazFi
PC上のApatchのlocalhostに置いてhttpアクセスしてみました。
やはり、動きませんでした。
しかし、HelloWorldは動きました。
同じアプレットのプログラムで何が異なっているんでしょう。
マニフェストファイル?(gcc環境で作成したことぐらいしか書いてない)
PC上の同じディレクトリにhtmlとjarを置いてブラウザで開くとちゃんとstartするのです。
まったく意味がわかりません。
0396名前は開発中のものです。2006/02/11(土) 09:29:15ID:mZnM3IUc
ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=12&topic=23657
と同じ原因じゃない?
0397名前は開発中のものです。2006/02/11(土) 12:19:21ID:uCg0fPDg
その2つのコードの違いがわからんとなんとも
0398名前は開発中のものです。2006/02/11(土) 13:52:36ID:tfXfazFi
動きました。
何を変えたかというと、10個ぐらいのクラスをjarアーカイブにしてたんですが展開してディレクトリ内にばらばらに置きました。
そうしたら動きました。
「たくさんあるときはjarにまとめなくてはいけない。」
思い込んでいたし、そう解説しているページもあった気がするのですが…。
だから残念ながら根本的に何がまずかったのかわかったわけではないです。
(ブラウザかJVMかが、なぜかjarをダウンロードして展開した一時フォルダを探していなかった?よくわかりません。)
なにか助言があればお願いしたいです。いろいろありがとうございました。
■ このスレッドは過去ログ倉庫に格納されています