サーバーにアップロードした際には、画像ファイルのファイル名は大文字と小文字を区別される。
ローカルでは区別しないので、appletviewer では正常に実行できるが、サーバーにアップロードした時に画像が読み込まれない症状が出る。
この時、エラーは表示されないので注意!!
import java.applet.*; import java.awt.*; import java.net.*; public class animation3 extends Applet implements Runnable { int FRAMES = 10;//画像の枚数 Image img1[] = new Image[FRAMES]; String fname1[] = {"0.PNG","1.PNG","2.PNG","3.PNG","4.PNG","5.PNG","6.PNG","7.PNG","8.PNG","9.PNG"}; MediaTracker tracker = new MediaTracker(this); String message=""; int num = 0; int speed=200;//アニメーションのスピードを設定 private Thread thre = new Thread(this); public void start() { thre.start(); } public void run() { int i = 0; for (num=0 ; num <= FRAMES-1 ; ++num ) { //画像を読み込む img1[num] = getImage(getDocumentBase(),fname1[num]); tracker.addImage(img1[num],0); try { tracker.waitForID(0); } catch( InterruptedException e ){ } } for ( i=0 ; i <= 30 ; ++i ) { //画像を表示する num = i % FRAMES; // i を FRAMES で割った余りをnumに代入 try { Thread.sleep(speed); } catch( InterruptedException e ){ } message = "実行中"; repaint(); } message = "終わりました"; repaint(); } public void paint(Graphics g){ g.drawString(message,10,190); if ( num <= FRAMES-1 ) { g.drawImage(img1[num],30,60,this); } } } 実行例
import java.applet.*; import java.awt.*; import java.net.*; import java.awt.event.*; import java.awt.Button; public class animation3_1 extends Applet implements Runnable, ActionListener { int FRAMES = 10;//画像の枚数 Image img1[] = new Image[10]; String fname1[] = {"0.PNG","1.PNG","2.PNG","3.PNG","4.PNG","5.PNG","6.PNG","7.PNG","8.PNG","9.PNG"}; MediaTracker tracker = new MediaTracker(this); String message=""; int num = 0; int speed=200;//アニメーションのスピードを設定 int jikkou = 1; // 1:実行 0:終了 private Thread thre = new Thread(this); private Button b = new Button("終了"); // ボタンを定義する public void init() { add(b); b.addActionListener(this); } public void start() { thre.start(); } public void run() { int i = 0; for (num=0 ; num <= FRAMES-1 ; ++num ) { //画像を読み込む img1[num] = getImage(getDocumentBase(),fname1[num]); tracker.addImage(img1[num],0); try { tracker.waitForID(0); } catch( InterruptedException e ){ } } while( jikkou == 1 ){//アニメーションを実行 i = i + 1; num = i % FRAMES; try { Thread.sleep(speed); } catch( InterruptedException e ){ } message = "実行中"; repaint(); } message = "終わりました"; repaint(); } public void actionPerformed(ActionEvent e) { jikkou = 0; repaint(); } public void paint(Graphics g){ g.drawString(message,10,190); if ( num <= FRAMES-1 ) { g.drawImage(img1[num],30,60,this); } } } 実行例
import java.applet.*; import java.awt.*; import java.net.*; import java.awt.event.*; import java.awt.Button; public class animation3_5 extends Applet implements Runnable, ActionListener { int FRAMES = 10;//画像の枚数 Image img1[] = new Image[FRAMES]; String fname1[] = {"0.PNG","1.PNG","2.PNG","3.PNG","4.PNG","5.PNG","6.PNG","7.PNG","8.PNG","9.PNG"}; MediaTracker tracker = new MediaTracker(this); String message=""; int num = 0; int speed=200;//アニメーションのスピードを設定 private Thread thre = new Thread(this); private Button b = new Button("もう一度"); // ボタンを定義する private Button b1 = new Button("終了"); // ボタンを定義する int reset = 1; // 1の時最初から実行 0なら実行されない(アイドリング) int jikkou = 1; // 1の時実行 0なら終了 public void init() { add(b); b.addActionListener(this); add(b1); b1.addActionListener(this); } public void start() { thre.start(); } public void run() { int i = 0; for (num=0 ; num <= FRAMES-1 ; ++num ) { //画像を読み込む img1[num] = getImage(getDocumentBase(),fname1[num]); tracker.addImage(img1[num],0); try { tracker.waitForID(0); } catch( InterruptedException e ){ } } while(jikkou == 1){ if(reset == 1) { for ( i=1 ; i <= 10 ; ++i ) { //画像を表示する num = i % FRAMES; // i を FRAMES で割った余りをnumに代入 try { Thread.sleep(speed); } catch( InterruptedException e ){ } message = "実行中"; repaint(); }//end of for reset = 0; }//end of if(reset == else { num = 0; try { Thread.sleep(speed); } catch( InterruptedException e ){ } message = "待機中"; repaint(); }//end of else }//end of while(jikkou == message = "終わりました"; repaint(); } public void actionPerformed(ActionEvent e) { String c; c = e.getActionCommand(); // ボタンのラベルの文字を取得する if(c == "もう一度") { reset = 1; message = "リセットされました"; } if(c == "終了") { jikkou = 0; } repaint(); } public void paint(Graphics g){ g.drawString(message,10,190); if ( num <= FRAMES-1 ) { g.drawImage(img1[num],30,60,this); } } } 実行例
import java.applet.*; import java.awt.*; import java.net.*; public class animation3_2 extends Applet implements Runnable { int FRAMES = 10;//画像の枚数 Image img1[] = new Image[10]; Image img2[] = new Image[10]; String fname1[] = {"0.PNG","1.PNG","2.PNG","3.PNG","4.PNG","5.PNG","6.PNG","7.PNG","8.PNG","9.PNG"}; String fname2[] = {"r0.PNG","r1.PNG","r2.PNG","r3.PNG","r4.PNG","r5.PNG","r6.PNG","r7.PNG","r8.PNG","r9.PNG"}; MediaTracker tracker = new MediaTracker(this); String message=""; int num = 0; int speed=200;//アニメーションのスピードを設定 private Thread thre = new Thread(this);; public void start() { thre.start(); } public void run() { int i = 0; for (num=0 ; num <= FRAMES-1 ; ++num ) { //画像を読み込む img1[num] = getImage(getDocumentBase(),fname1[num]); tracker.addImage(img1[num],0); img2[num] = getImage(getDocumentBase(),fname2[num]); tracker.addImage(img2[num],1); try { tracker.waitForID(0); tracker.waitForID(1); } catch( InterruptedException e ){ } } for ( i=0 ; i <= 30 ; ++i ) { //画像を表示する num = i % FRAMES; // i を FRAMES で割った余りをnumに代入 try { Thread.sleep(speed); } catch( InterruptedException e ){ } message = "実行中"; repaint(); } message = "終わりました"; repaint(); } public void paint(Graphics g){ g.drawString(message,10,190); if ( num <= FRAMES-1 ) { g.drawImage(img1[num],30,60,this); g.drawImage(img2[num],30,260,this); } } } 実行例
【問題】
上の例にボタンを2つ追加(アニメ1、アニメ2)、ボタンで画像を選択するように変更しなさい。
実行例
【問題】
上の問題にボタンを1つ追加(終了ボタンを追加)し、終了ボタンを押すまで繰り返し実行するように変更しなさい。
実行例