Na początek witam wszystkich użytkowników tego forum.
Napisałem applet którego zadaniem jest wyświetlanie kolejnych zdjęć w pętli. Gdy odpalam go w Eclipse wszystko fajnie działa. Podobnie przy wykorzystaniu appletviewer ale gdy umieszam go w html koniec radości. Dodam że jestem początkującym programistą i więcej napisałem aplikacji niż apletów.
Umieszczenie apletu w html:
<html>
<body>
<applet code="ImageApp.class" width=800 height=600> <!-- codebase="x-applet" -->
<param name="file" value="ImageList.txt"> <!-- nazwa pliku -->
<param name="colorR" value="21"> <!-- wartość koloru czerwonego (0-255) -->
<param name="colorG" value="222"> <!-- wartość koloru zielonego (0-255) -->
<param name="colorB" value="121"> <!-- wartość koloru niebieskiego (0-255) -->
<param name="miliSekundy" value="3000"> <!-- zmiana fotki co 3 sekundy -->
</applet>
</body>
</html>
Źródło apletu:
import java.applet.Applet;
import java.awt.*;
import java.io.*;
import java.util.*;
public class ImageApp extends Applet implements Runnable {
//deklaracja zmiennych
private static final long serialVersionUID = 1L;
private ArrayList<String> imagesTable = new ArrayList<String>();
private int cR, cG, cB, mSek;
private String color, file, miliSekundy;
private BufferedReader inputFile;
private Image aktualneZdjecie;
private int iloscZdjec;
private int x = 10;
private int y = 10;
private int aktualnyNumerZdjecia = 0;
private Thread my_thread = null;
//inicjalizacja obiektów
public void init() {
//pobranie parametrów tła appletu
if ((color=getParameter("colorR"))!=null) cR=Integer.parseInt(color);
if ((color=getParameter("colorG"))!=null) cG=Integer.parseInt(color);
if ((color=getParameter("colorB"))!=null) cB=Integer.parseInt(color);
setBackground(new Color(cR,cG,cB));
//pobranie parametru nazwy pliku z listą zdjęć,
//generowaną lokalnie przez użytkownika (programik zewnętrzny).
//plik z listą jest umieszczony obok appletu i zdjęć
if ((file=getParameter("file"))==null) {
System.out.println("Nie pobrano nazwy pliku");
file = "ImageList.txt";
}
//pobranie parametru milisekund
if ((miliSekundy=getParameter("miliSekundy"))!=null) mSek=Integer.parseInt(miliSekundy);
else mSek=3000;
//metoda wypełnia tablicę typu ArrayList<String> i zwraca ją w postaci obietku
myFileReader(file);
//pobranie liczby wierszy z pliku
iloscZdjec = imagesTable.size();
}
public void start() {
my_thread = new Thread(this);
my_thread.start();
}
public void run() {
while (true) {
if (aktualnyNumerZdjecia!=(iloscZdjec-1))
aktualneZdjecie = getImage(getCodeBase(), imagesTable.get(aktualnyNumerZdjecia++));
else {
aktualneZdjecie = getImage(getCodeBase(), imagesTable.get(aktualnyNumerZdjecia));
aktualnyNumerZdjecia = 0;
}
repaint();
try {
Thread.sleep(mSek);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private ArrayList<String> myFileReader(String nazwaPliku) {
try {
inputFile = new BufferedReader(new FileReader(file));
String line = "";
while (true) {
line = inputFile.readLine();
if (line == null)
break;
imagesTable.add(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return imagesTable;
}
public void paint(Graphics g) {
int imgWidth = aktualneZdjecie.getWidth(this);
int imgHeight = aktualneZdjecie.getHeight(this);
int x = (getWidth()-imgWidth)/2;
int y = ((getHeight()-imgHeight)/2)-20;
g.setColor(Color.WHITE);
g.fillRect(x-10, y-10, imgWidth+20, imgHeight+50);
g.drawImage(aktualneZdjecie, x, y, this);
}
}
Aplet korzysta z pliku ImageList.txt z listą generowaną przez użytkownika (do tego napisałem oddzielną aplikację). Obok listy są umieszczone zdjęcia, klasa i index.html. Przykładowa lista:
100_4393.jpg
100_4394.jpg
100_4395.jpg
Pomożecie?