ActionScriptで自前のクラス定義を行い、Flashでそのクラスを利用してコンパイルを行おうとすると
「クラス名のコンフリクト:~.as: 行 ~:このクラスの名前 '~' は、ロードされた別のクラスの名前 '~' とコンフリクトします。」
なんてエラーが発生するときが相当あります。シンタックスも、importも問題ないはず!にも関わらずこんなものが起こることがほとんとで。これ軽くググるとかなり有名な問題みたいですね。。これについてのエントリーが出るわ出るわ。
そんな僕も相当ハマりましたが、これをなんとか回避するためのバッドノウハウをメモします。
まずこのエラーの根本的な原因としてASOファイルにあります。
ASOファイルってのはLivedocsによると、こんなものらしいです。
ActionScript 2.0 ファイルが暗黙的または明示的に読み込まれ、正常にコンパイルされると、それらの各ファイルに対する ASO ファイルが生成されます。ASO ファイルには、対応する ActionScript (AS) ファイルから作成されたバイトコードが含まれます。したがって、これらのファイルには、クラスファイルのコンパイル済み形式 (バイトコード) が格納されます。
要するに自前でクラス定義を行って、Flashでコンパイル(Publish)すると必ず生成されるもの、ということです。で、コンフリクトがおこるときはたいてい古いASOファイルが残ってASファイル側を更新してもASOが更新されない、というのが理由だそうです。なので、
1) FlashのキャッシュファイルであるASOファイルを消してみる。
というのが、まず最初に行うべきポイント。
ASOファイルは
「C:\Documents and Settings\{ User Name}\Local Settings\Application Data\Macromedia\
Flash 8\ja\Configuration\Classes\aso\」
にあるので、ここ以下全ファイル削除でOKです。
こうやって自分の手で確実に削除してもいいんですけど、Flash8からはASOファイルを削除してからPublishする、という機能もあります。
2) Flashの「制御」→「ASOファイルを削除してムービーをプレビューする」
で、ASOファイルを削除してからパブリッシュ、プレビューする、まで全て行ってくれます。僕はこれを「Alt+Shift+F12」にショートカットを割り当てて、いつもそこからパブリッシュしています。
で、本当ならこれでOKみたいらしいですが、それでもまだエラーを吐いてくる場合があります。というか、僕の環境だとまだ確実に出てきます。
そこで、更に有効な手段はこちら。(ktdktd.comより)
3) 関連する自作ASファイル内のimport文を全てコメントアウトし、コンパイル。
(当然、自作クラスを参照できないというエラーが出るがコンフリクトエラーが消える)
4) コメントアウトを元に戻し、再度コンパイル。
これエラーが消える回数がグンと増えました。
要するに意図的にASOファイルを作り直させて参照を更新させて・・・るのかな?
(この辺り、理屈はよく分かってません)
が、が、でもでもまだこれでも完璧では無いのです。
それでもまだ僕の環境ではエラーを吐いてきます。謎すぎ。
で、今のところ分かっているほぼ確実にエラーを回避できる最終手段は
5) しばらく待つ
これです。
もうPC相手とは思えないネタみたいな対処方法、、ですが
エラーにうんざりして休憩→
無駄と思いつつもPublish→
普通にPublishが通る
なんてことがあります。と、いうか何度もあって笑えました、ほんと。
あくまで予想ですが、ASOファイル、ASファイル、flaファイルの何かのタイムスタンプが悪さをしているのかもしれないです。僕はNAS上にこれらのファイルを置いておき、ローカルのPCにインストールされたFlash8で開発を行っているのですが、ローカルPCとNASマシンの時計設定が微妙にズレてたりしてる??のかな・・・?
確かに1分程度ズレてはいるのですが、ここまでエラーを引きずられると本当に厳しいです。。
と、いうわけでまだまだ謎なことが多すぎるこのコンフリクトエラー。どなたか確実にコンフリクトエラーを回避する方法をご存知の方は教えていただきたいです(切に)
---
(追記:2007/02/12)
結局原因はローカルのPCとNASの時計がズレている、というのが原因でした。
NASの時計がローカルの時計より遅れている場合にASOファイルの削除だけでは解決できないようです。
解決方法として「時計を合わす」で終了なのですが、NASの時計を操作できない場合はローカルの時計を無理やり早めた状態でASOファイルを削除+パブリッシュするとOKです。
もーこれでハマることなくサクサクとパブリッシュできてる毎日です。
- Newer: ExternalInterfaceを使ったFlashの呼び出し元制御
- Older: 国立新美術館に行ってきました
Google Adsense
Social bookmark comment : 0
No comment.
Comment : 0
Trackback : 0
- TrackBack URL for this entry
- http://blog.katsuma.tv/mt-tb.cgi/27
- Listed below are links to weblogs that reference
- ActionScriptのコンフリクトエラー from blog.katsuma.tv
2007/02/04 (Sun)