0
appletviewerがループする。。。
Appletに挑戦しているのですがappletviewerを実行すると、なぜかappletviewerのコマンドの文が永遠に繰り返されます。エクリプスではちゃんと実行されるのを確認したのですが、なぜでしょうか。コンパイルもちゃんとできました。
プログラムはこうなっています。
package animation;
import java.applet.Applet;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
/*<applet code="Animation.class" width="600" height="800">
</applet>*/
public class Animation extends Applet implements Runnable,KeyListener{
Thread thread=null; //スレッドを作る
Dimension size; //ダブルバッファの準備
Image back;
Graphics buffer;
Image slime,dirt,grassDirt;
String presskey="";
int key;
int x=800,y=470,a=0;
public void init() {
System.out.println("init");
this.setSize(800,600);
this.setBackground(Color.red);
slime=getImage(getCodeBase(),"../img/char_m_sl_g.png");//スライムの準備
dirt=getImage(getCodeBase(),"../img/dirt.png");
grassDirt=getImage(getCodeBase(),"../img/grass_side.png");
addKeyListener(this);
//ダブルバッファの作成
size=getSize();
back=createImage(size.width,size.height);
buffer=back.getGraphics();
}
public void start() {
System.out.println("start");
//スレッドを開始
thread=new Thread(this);
thread.start();
}
public void stop() {
}
public void destroy(){
}
public void update(Graphics g){
paint(g);
}
public void paint(Graphics g){
int ani=a*23;
buffer.clearRect(0, 0, 800, 600);//表示されているスライムを削除
for(int i=0;i<800;i+=32){
for(int j=0;j<600;j+=32){
buffer.drawImage(dirt, 0+i, 500+j, 32+i, 532+j, 0, 0, 16, 16, this);
}
}
for(int i=0;i<800;i+=32){
buffer.drawImage(grassDirt, 0+i, 500, 32+i, 532, 0, 0, 16, 16, this);
}
//画像表示する始点xy、終点xy、画像を切り取る始点xy、終点xy
buffer.drawImage(slime,x,y,x+46,y+32,0+ani,96,23+ani,112,this);
requestFocusInWindow();
g.drawImage(back, 0, 0, this);//ダブルバッファを反映
}
public void run() {
boolean bigger=false;
int t=0;
while(true){
if(t%4==0){ //スライムの動きを0.2秒毎にする
if(a==2){
a--;
bigger=false;
}else if(a==0){
a++;
bigger=true;
}else if(a==1&&bigger){
a++;
}else if(a==1&&!bigger){
a--;
}
x-=5;
}
// if(key==39){ //プレーヤーが操作するとき用
// x+=69;
// }else if (key==37){
// x-=69;
// }
// key=0;
try{ //作業を0.05秒停止させる
Thread.sleep(50);
t++;
}catch(InterruptedException e){
}
repaint();
}
}
@Override
public void keyTyped(KeyEvent e) {
// TODO 自動生成されたメソッド・スタブ
}
@Override
public void keyPressed(KeyEvent e) {//押されたボタンを取得
key=e.getKeyCode();
}
@Override
public void keyReleased(KeyEvent e) {
}
}