第 2 章 GUI ツールの概要 3
3.8 開発時に発生した問題点と解決法
} e l s e if ( l a s t T i m e >= 50 && d e a d l i n e M i s s T i m e >=
l a s t T i m e - 25) {
c r e a t e C h a r t ( l a s t T i m e - 50 , l a s t T i m e , s t a g e ) ; c u r r e n t M i n T i m e = l a s t T i m e - 50;
c u r r e n t M a x T i m e = l a s t T i m e ; } e l s e {
c r e a t e C h a r t ( d e a d l i n e M i s s T i m e - 25 , d e a d l i n e M i s s T i m e + 25 , s t a g e ) ;
c u r r e n t M i n T i m e = d e a d l i n e M i s s T i m e - 25;
c u r r e n t M a x T i m e = d e a d l i n e M i s s T i m e + 25;
}
A l e r t n o N e x t D e a d l i n e M i s s = new A l e r t ( A l e r t T y p e . I N F O R M A T I O N ) ;
n o N e x t D e a d l i n e M i s s . s e t T i t l e (" I n f o r m a t i o n ") ;
n o N e x t D e a d l i n e M i s s . s e t C o n t e n t T e x t (" T h i s is the f i r s t d e a d l i n e m i s s .") ;
n o N e x t D e a d l i n e M i s s . s h o w A n d W a i t () . i f P r e s e n t ( r e s p o n s e - > { if ( r e s p o n s e == B u t t o n T y p e . OK ) {
r e t u r n ; }
}) ; }
} }
なお、前方への検索でも後方への検索でもデッドラインミスが存在しない場合は図
3.21
のように表示される。図
3.21:
デッドラインミスが存在しないことを示すメッセージ表示1.
仮想マシン上で非常に長いティック範囲のグラフを表示し、ズームを繰り返すと表 示が崩れる2.
非常に長いティック範囲のグラフを画像としてエクスポートすると、例外が発生し てエクスポートできないMac OS 10
上でVMWare
を使用してWindows 7
の仮想環境を構築して検証を行っていた ところ、非常に長いティック範囲のグラフを表示し、ズームを繰り返すと表示が崩れる問 題が発生した。その際にはListing3.19
のようにGUI
ツールを実行していた。Listing 3.19:
問題発生時のGUI
ツールの実行方法ja v a t a s k s c h e d u l i n g . C h a r t C r e a t e r
図
3.22
が9997
ティック分のイベントをグラフ表示した直後の状態、図3.23
がその後8
回ズームを行った状態である。図
3.22:
仮想マシン上で9997
ティックを表示図3.23:
仮想マシン上で9997
ティックを表示 した後8
回ズームを行ったグラフJavaFX
ではパフォーマンス上の観点から可能な場合はハードウェア側で画像のレンダリングを行う動作となっている
[11]
が、JavaFXは正式に仮想環境をサポートしておらず、仮想環境ではハードウェアでの画像レンダリングに問題が発生してしまうため、このよう に表示が崩れる状態になっていた。このため、Listing3.20のように
JVM
引数prism.order
を使用してソフトウェア・レンダリングを強制的に実行させるような設定を行い、問題を 解決することができた。Listing 3.20:
問題解決後のGUI
ツールの実行方法ja v a - D p r i s m . o r d e r = sw t a s k s c h e d u l i n g . C h a r t C r e a t e r
また、非常に長いティック範囲のグラフを画像としてエクスポートすると、例外が発生 してエクスポートできない問題も発生していたが、同様に
Listing3.20
で画像をソフトウェ ア・レンダリングで生成させることにより解決することができた。この問題は非仮想環境 でも発生しており、9997ティックのグラフを全範囲で表示し、その後15
回ズーム(図 3.24
参照)してから画像エクスポートを行うと、Listing3.21の例外が発生した。ズーム回数を 減らした場合には発生しなかった。図
3.24:
非仮想環境で9997
ティック表示後15
回ズームした画面Listing 3.21:
非仮想環境で9997
ティック表示後15
回ズームしたした後画像エクスポート した際に発生した例外ja v a . l a n g . R u n t i m e E x c e p t i o n : R e q u e s t e d t e x t u r e d i m e n s i o n s ( 1 7 7 6 4 x 4 8 0 ) r e q u i r e d i m e n s i o n s (0 x 4 8 0 ) t h a t e x c e e d m a x i m u m t e x t u r e s i z e ( 1 6 3 8 4 )
at com . sun . p r i s m . es2 . E S 2 R T T e x t u r e . c r e a t e ( E S 2 R T T e x t u r e . j a v a : 2 2 0 ) at com . sun . p r i s m . es2 . E S 2 R e s o u r c e F a c t o r y . c r e a t e R T T e x t u r e (
E S 2 R e s o u r c e F a c t o r y . j a v a : 1 5 7 )
at com . sun . p r i s m . es2 . E S 2 R e s o u r c e F a c t o r y . c r e a t e R T T e x t u r e ( E S 2 R e s o u r c e F a c t o r y . j a v a : 1 5 3 )
at com . sun . j a v a f x . tk . q u a n t u m . Q u a n t u m T o o l k i t$Q u a n t u m I m a g e . g e t R T ( Q u a n t u m T o o l k i t . j a v a : 1 2 8 4 )
at com . sun . j a v a f x . tk . q u a n t u m . Q u a n t u m T o o l k i t$5 . run ( Q u a n t u m T o o l k i t . j a v a : 1 4 2 1 )
at j a v a . u t i l . c o n c u r r e n t . E x e c u t o r s$R u n n a b l e A d a p t e r . c a l l ( E x e c u t o r s . j a v a : 5 1 1 )
at j a v a . u t i l . c o n c u r r e n t . F u t u r e T a s k . r u n A n d R e s e t ( F u t u r e T a s k . j a v a : 3 0 8 )
at com . sun . j a v a f x . tk . R e n d e r J o b . run ( R e n d e r J o b . j a v a : 5 8 ) at j a v a . u t i l . c o n c u r r e n t . T h r e a d P o o l E x e c u t o r . r u n W o r k e r (
T h r e a d P o o l E x e c u t o r . j a v a : 1 1 4 2 )
at j a v a . u t i l . c o n c u r r e n t . T h r e a d P o o l E x e c u t o r$W o r k e r . run ( T h r e a d P o o l E x e c u t o r . j a v a : 6 1 7 )
at com . sun . j a v a f x . tk . q u a n t u m . Q u a n t u m R e n d e r e r$P i p e l i n e R u n n a b l e . run ( Q u a n t u m R e n d e r e r . j a v a : 1 2 5 )
at j a v a . l a n g . T h r e a d . run ( T h r e a d . j a v a : 7 4 5 )
E x c e p t i o n in t h r e a d " J a v a F X A p p l i c a t i o n T h r e a d " j a v a . l a n g . I l l e g a l A r g u m e n t E x c e p t i o n : U n r e c o g n i z e d i m a g e l o a d e r : n u l l
at j a v a f x . s c e n e . i m a g e . W r i t a b l e I m a g e . l o a d T k I m a g e ( W r i t a b l e I m a g e . j a v a : 2 4 0 )
at j a v a f x . s c e n e . i m a g e . W r i t a b l e I m a g e . a c c e s s$0 0 0 ( W r i t a b l e I m a g e . j a v a : 4 6 )
at j a v a f x . s c e n e . i m a g e . W r i t a b l e I m a g e$1 . l o a d T k I m a g e ( W r i t a b l e I m a g e . j a v a : 5 1 )
at j a v a f x . s c e n e . S c e n e . d o S n a p s h o t ( S c e n e . j a v a : 1 2 3 6 ) at j a v a f x . s c e n e . N o d e . d o S n a p s h o t ( N o d e . j a v a : 1 8 6 4 ) at j a v a f x . s c e n e . N o d e . s n a p s h o t ( N o d e . j a v a : 1 9 4 2 )
at t a s k s c h e d u l i n g . C h a r t C r e a t e r . e x p o r t ( C h a r t C r e a t e r . j a v a : 4 0 1 ) at t a s k s c h e d u l i n g . C h a r t C r e a t e r$2 . l a m b d a$n u l l$0 ( C h a r t C r e a t e r . j a v a
: 1 0 7 )
at com . sun . j a v a f x . a p p l i c a t i o n . P l a t f o r m I m p l . l a m b d a$n u l l$1 7 3 ( P l a t f o r m I m p l . j a v a : 2 9 5 )
at j a v a . s e c u r i t y . A c c e s s C o n t r o l l e r . d o P r i v i l e g e d ( N a t i v e M e t h o d ) at com . sun . j a v a f x . a p p l i c a t i o n . P l a t f o r m I m p l . l a m b d a$r u n L a t e r$1 7 4 (
P l a t f o r m I m p l . j a v a : 2 9 4 )
at com . sun . g l a s s . ui . I n v o k e L a t e r D i s p a t c h e r$F u t u r e . run ( I n v o k e L a t e r D i s p a t c h e r . j a v a : 9 5 )
この例外は画像生成に必要なテキスチャ・サイズがハードウェアで提供しているテクス チャ・サイズを超えたために発生しているので、こちらもハードウェアによる画像レンダ リングを行わず、ソフトウェア・レンダリングを使用することで解決できた。