こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

アプレットは初期化されていません

いつもお世話になっています。
早速ですが、appletviewerで見たときにタイトルのように「アプレットは初期化されていません」と出てきます。これを解決するにはどうすればいいのでしょうか?
 ちなみに私が作っているのは白黒のみの画像をロードして、黒い部分を四角で覆い重心を求めるというものです。ソースを載せておきます。


import java.applet.*;
import java.awt.*;
import java.awt.image.*;

public class test extends Applet
{
Image img;// 元のイメージ

int img_width = 0;// 元のイメージの幅
int img_height = 0;// 元のイメージの高さ

int pix[];// 元のイメージを格納する配列
int wcnt_pix[];// 行ごとの黒画素数を格納する配列
int hcnt_pix[];// 列ごとの黒画素数を格納する配列

int cnt = 0;// 黒画素のカウント用
int cnt_sum = 0;// 黒画素のカウント総数
int chu = 0;// 中心値
int sum1 = 0;
int sum2 = 0;
int x = 0;
int y = 0;

int xmax = 0;// 黒画素の右端
int xmin = 0;// 黒画素の左端
int ymax = 0;// 黒画素の上端
int ymin = 0;// 黒画素の下端

public void init(){
img = getImage(getDocumentBase(), "test.jpg");// イメージのロード

MediaTracker mt = new MediaTracker(this);
mt.addImage(img, 0);
try{
mt.waitForID(0);
}catch(InterruptedException e){}// イメージのロード完了まで待機

img_width = img.getWidth(this);// 元のイメージの幅を取得
img_height = img.getHeight(this);// 元のイメージの高さを取得

cntpix();


box_top();
box_bot();
box_rig();
box_lef();
}

// 黒画素数のカウント
public void cntpix(){
pix = new int[img_width * img_height];
wcnt_pix = new int[img_width];
hcnt_pix = new int[img_height];

try{
PixelGrabber pg = new PixelGrabber(img, 0, 0, img_width, img_height, pix, 0, img_width);
pg.grabPixels();
}catch(InterruptedException e){}

// 行ごとのカウント
for(int wj = 0; wj < img_height; wj++){
cnt = 0;
for(int wi = 0; wi < img_width; wi++){
if((pix[wj * img_width + wi] & 255) < 128){
cnt++;
}
}
wcnt_pix[wj] = cnt;
cnt_sum = cnt_sum + cnt;
}

// 列ごとのカウント
for(int hi = 0; hi < img_width; hi++){
cnt = 0;
for(int hj = 0; hj < img_height; hj++){
if((pix[hj * img_width + hi] & 255) < 128){
cnt++;
}
}
hcnt_pix[hi] = cnt;
}

chu = cnt_sum / 2;// 中心値

// 中心値より重心が何行目かを求める
int i = 0;
while(sum1 < chu){
sum1 = sum1 + wcnt_pix[i];
i++;
}
x = i - 1;

// 中心値より重心が何列目かを求める
int j = 0;
while(sum2 < chu){
sum2 = sum2 + hcnt_pix[j];
j++;
}
y = j - 1;
}

// 黒画素の上端を求める
public void box_top(){
int ti = 0;
while(wcnt_pix[ti] == 0){
ymax = ti;
ti++;
}
}

// 黒画素の下端を求める
public void box_bot(){
int bi = img_height;
while(wcnt_pix[bi] == 0){
ymin = bi;
bi--;
}
}

// 黒画素の右端を求める
public void box_rig(){
int ri = 0;
while(hcnt_pix[ri] == 0){
xmin = ri;
ri++;
}
}

// 黒画素の左端を求める
public void box_lef(){
int li = img_width;
while(hcnt_pix[li] == 0){
xmax = li;
li--;
}
}

// 画像等の描画
public void paint(Graphics g){
int dx = x - xmin;// 重心のX座標
int dy = y - ymax;// 重心のY座標

g.drawImage(img, 0, 0, this);
g.drawString("このイメージの幅は"+img_width+"で高さは"+img_height+"です。", 0, 20);// 画像の描画
g.drawLine(xmin, ymax, ymax, ymax);
g.drawLine(xmin, ymax, xmin, ymin);
g.drawLine(xmin, ymin, xmax, ymin);
g.drawLine(xmax, ymax, xmax, ymax);// バウンディングボックスの描画

g.setColor(Color.red);
g.drawString("重心は、( "+dx+", "+dy+" )です。", 0, 60);// 重心の描画
g.drawLine(x-10, y, x+10, y);// 重心の位置の描画
g.drawLine(x, y+10, x, y-10);// 重心の位置の描画
}
}

投稿日時 - 2010-02-09 19:44:31

QNo.5662588

すぐに回答ほしいです

質問者が選んだベストアンサー

バグがあって、例外を吐き、異常終了している。
スタックトレースを確認して、修正しましょう。

投稿日時 - 2010-02-09 20:37:40

お礼

早速の回答ありがとうございます。
ご指摘の通り確認してみると間違いに気付き修正した結果、正常に実行出来ました。
本当に助かりました。

投稿日時 - 2010-02-09 21:48:08

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問