プロが教える店舗&オフィスのセキュリティ対策術

java初心者です。
あるアプレットを作成(クリックすると画像が変わっていく)したのですが、自分のPC上で、ローカルでブラウザを起動させると正常にアプレットが動くのですが、それ(フォルダ全部)をまるごとサーバにのっけるとなぜかアプレットが正常に動作しません。
クリックしても画像が変わりません…。
ブラウザの下の表示には、アプレット Main Startedとなっています。
画像も最初の画像は問題なく表示されています。ただクリックしても次の画像に移りません。

よろしくお願いします。

A 回答 (3件)

ソースコード


および
> (フォルダ全部)
フォルダの構造
プリーズ!

ソースは、大きければどこかに載っけてURLを教えて。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
下記の記事にファイルをアップしました。よろしくお願いします。

フォルダの構成はこのjavaファイルとこのclassファイルと、「imegesyukusyo」フォルダがあり、このフォルダの中に、画像ファイル(1.jpg~12.jpg)が入っています。

http://rapuntuleru.cocolog-nifty.com/blog/

お礼日時:2008/03/09 16:59

ソース拝見しましたよ。

基本的にあなたは、MediaTrackerというものを誤解してますね。あれは、画像(等)の事前ロードを確実に行うためのものであり、ランタイムにアニメクラスのタイミングで頻繁んに呼ぶものではありません。無茶ですよ(物理的な回線のないローカル機の上でしか、まともに動かないでしょう)。

なお、最初からSwingつまりJAppletやJPanelを使えば、ダブルバッファリングがすでに実装されているので、プログラマの負担は軽いです。

このほか、あなたのコードには無駄な部分や、無意味に複雑な部分が多いです。簡単なアプリケーションだから、簡単に書きましょう。たとえば、このように:
(参考URLにアクセスしてみてください。)
------------------------------------------------------
/* save and compile as Nabe.java */
/*
<applet code="Nabe" width="640" height="480">
<param name="NumImage" value="12">
</applet>
*/

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

public class Nabe extends Applet implements MouseListener, Runnable{
Image currentImage, buf;
Image[] imgs;
int now, yousosu, w, h, sleeptime;
MediaTracker mt;
Thread thread;
float alpha = 1.0f;
Graphics2D bg;
AlphaComposite composite;

public void init(){
now = 0;
sleeptime = 120;
yousosu = Integer.parseInt(getParameter("NumImage"));
addMouseListener(this);
imgs = new Image[yousosu];

w = getSize().width;
h = getSize().height;
buf = createImage(w, h);
bg = ((Graphics2D)(buf.getGraphics()));

mt = new MediaTracker(this);
for (int i = 0; i < yousosu; ++i) {
imgs[i]
= getImage(getDocumentBase(),"imagesyukusyo/" + (i + 1) + ".jpg");
mt.addImage(imgs[i], 0);
}
try{
mt.waitForID(0);
}
catch (InterruptedException ie){
ie.printStackTrace();
}

composite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha);

currentImage = imgs[now];
thread = new Thread(this);
thread.start();
}

public void update(Graphics g){
paint(g);
}

public void paint(Graphics g){
g.drawImage(buf, 0, 0, w, h, this);
}

public void mouseClicked(MouseEvent e) {
int btn = e.getButton();

if (btn == MouseEvent.BUTTON1){
++now;
if (now >= yousosu){
now = 0;
}
}
else if (btn == MouseEvent.BUTTON3){
--now;
if (now < 0){
now = (yousosu - 1);
}
}
currentImage = imgs[now];
thread = new Thread(this);
thread.start();
}

public void run(){
for (alpha = 0.2f; alpha < 1.1f; alpha += 0.1f){ //フェードイン効果
if (alpha > 1.0f){ //浮動小数点数の端数エラーを防ぐ苦肉の策
alpha = 1.0f;
}
composite = composite.derive(alpha);
bg.setComposite(composite);
bg.drawImage(currentImage, 0, 0, w, h, this);
repaint();
try {
thread.sleep(sleeptime);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}

public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
}
-----------------------------------------------

参考URL:http://rancoon.web.fc2.com/nabe.html

この回答への補足

質問者です。
_ranco_さんのコードを読んで勉強しようと思ったのですが、88行目の
composite = composite.derive(alpha);
のところで、エラーが出てしまいコンパイルできないのですが…。

もし、よければ、補足よろしくお願いします。

補足日時:2008/03/11 13:15
    • good
    • 0
この回答へのお礼

コードの指導までありがとうございます(笑)
とても勉強になります。参考にしながら、もう一回プログラムしなおしたいと思います。

お礼日時:2008/03/10 21:48

> composite = composite.derive(alpha);


Java 1.6をダウンロード/インストールしてください。
それが不可能なら、getInstance()を使うしかないですね。

この回答への補足

質問者です。解決しました。
ありがとうございました!

補足日時:2008/03/13 05:33
    • good
    • 0
この回答へのお礼

何度も回答ありがとうございます!getInstance()を使ったら、うまく動きました!
…のですが、今度は別の問題が出まして…。画像が完全に不透明に表示されないです…。例えば、一つ目の画像が表示されてクリックして、二つ目の画像に変化する時に、二つ目の画像が8,9割くらいは不透明に表示されたところで、スレッドが止まるみたいで、一つ目の画像がまだぼんやり見えてしまうんです…。
_ranco_さんが設置したアプレットは、綺麗に見えるので環境の問題ではないよなぁ…と思うんですが…。ただ自分でコードを読んでも、綺麗に完全に次の画像に変わるはず!としか判断できません…。
何か原因は、思い当たるでしょうか…?
何度もすみません。よろしくお願いします。

お礼日時:2008/03/12 23:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!