obrazki w apletach

0

wiem ze to bylo juz wiele razy wiec przepraszam!
oto kod:

/**

  • @(#)test1.java
  • test1 Applet application
  • @Author
  • @version 1.00 2008/9/28
    */

import java.awt.;
import java.applet.
;
import java.awt.Image;
import java.net.URL;

public class test2 extends Applet {

private Image dbImage;
private Graphics dbg;
float rad,value;
Image img;
public void digitd(double vd,int x,int y,Graphics g)
{
g.drawString(String.valueOf(vd),x,y);
}
public void digitf(float vf,int x,int y,Graphics g)
{
g.drawString(String.valueOf(vf),x,y);
}
public void digiti(int vi,int x,int y,Graphics g)
{
g.drawString(String.valueOf(vi),x,y);
}
/*public static byte[] imageToByteArray(Image image) {

  MediaTracker tracker = new MediaTracker(new Container());
  tracker.addImage(image, 0);
  try {
      tracker.waitForAll();
  }
  catch(InterruptedException e) { }
  BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), 1);
  Graphics gc = bufferedImage.createGraphics();
  gc.drawImage(image, 0, 0, null);
  
  ByteArrayOutputStream bos = new ByteArrayOutputStream();
  ImageIO.write(bufferedImage, "jpeg", bos);

  return bos.toByteArray();
}*/

//BufferedImage bufor=(BufferedImage)createImage(img.getWidth(null),img.getHeight(null));

public void init() 
{
	setBackground (Color.black);
	value=0;	
	rad=(float)3.141592653/180;	
}

public void run ()
{
		
}
public void paint(Graphics g) {
	value+=0.1;	
		
	g.setColor(Color.green);		
	float beta=value*rad;
	int x=Math.round(160+100*(float)Math.sin(beta));
	int y=Math.round(100+100*(float)Math.cos(beta));

	img=getImage(getDocumentBase(),"plika.jpg");


    

	g.drawImage(img,x,y,this);
	g.drawString("BH is live!",x,y);
			
	repaint();	
	
}

public void update (Graphics g)
{
	//DoubleBuffers
	if (dbImage == null)
	{
		dbImage = createImage (this.getSize().width, this.getSize().height);
		dbg = dbImage.getGraphics ();
	}
	dbg.setColor (getBackground ());
	dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);
	dbg.setColor (getForeground());
	paint (dbg);
	g.drawImage (dbImage, 0, 0, this);
}

}

przeszukalem tematy z obrazkami w apletach i nic nie pomoglo,
na komputerze dziala, ale po zaladowaniu na strone obrazek sie nie wczytuje
probowalem roznymi sposobami np:

URL url = getClass().getResource("plika.jpg");
img = getToolkit().getImage(url);

img = Toolkit.getDefaultToolkit().getImage("plika.jpg");

URL url = this.getClass().getResource("plika.jpg");
img = this.getImage(url);

powiem tylko ze obrazek znajduje sie w glownym katalogu a adres www to X.w8w.pl, nie wiem czy to moze jest wina czasem w8w.pl, pomocy!

0

mialem kiedys podobny problem i znalazlem takie rozwiazanie, moze tobie tez pomoze.
U mnie to tak wygladalo:

ImageIcon icon  = new ImageIcon(loadImageResource("obrazek.jpg"));

public Image loadImageResource(String resname)
         throws IOException
         {
           Image ret = null;
           Class clazz = getClass();
           InputStream is = clazz.getResourceAsStream(resname);
            if (is != null) {
             byte[] buffer = new byte[0];
             byte[] tmpbuf = new byte[1024];
             while (true) {
               int len = is.read(tmpbuf);
               if (len <= 0) {
                 break;
               }
               byte[] newbuf = new byte[buffer.length + len];
               System.arraycopy(buffer, 0, newbuf, 0, buffer.length);
               System.arraycopy(tmpbuf, 0, newbuf, buffer.length, len);
               buffer = newbuf;
             }
             //create image
             ret = Toolkit.getDefaultToolkit().createImage(buffer);
             is.close();
           }
           return ret;
         }

dodatkowa funkcja loadImageResource, ale u mnie to akurat dzialalo.

0

jeszcze jedno, poniewaz od paru dni ucze sie javy i nie wiem jakie dodac tzw "zalaczniki" np
import java.awt.*;
ps:jak sie to nazywa?

jak pisze w vc++6.0 juz pare lat to wiem co dodac wiec prosze o wyrozumialos a w tym jestem total zielony.

--------------------Configuration: test2 - JDK version 1.6.0_07 <Default> - <Default>--------------------
E:\JAVA_MOJE_FAQ\test2\src\test2.java:53: cannot find symbol
symbol : class ImageIcon
location: class test2
ImageIcon icon = new ImageIcon(loadImageResource("obrazek.jpg"));
^
E:\JAVA_MOJE_FAQ\test2\src\test2.java:56: cannot find symbol
symbol : class IOException
location: class test2
throws IOException
^
E:\JAVA_MOJE_FAQ\test2\src\test2.java:53: cannot find symbol
symbol : class ImageIcon
location: class test2
ImageIcon icon = new ImageIcon(loadImageResource("obrazek.jpg"));
^
E:\JAVA_MOJE_FAQ\test2\src\test2.java:60: cannot find symbol
symbol : class InputStream
location: class test2
InputStream is = clazz.getResourceAsStream(resname);
^
4 errors

0

import javax.swing.ImageIcon;
import java.io.IOException;
import java.io.InputStream;

0

jesli ktos jest ciekaw co bylo wiec pisze:
rozroznianie duzych i malych liter plus dodanie '/'

np xxx.w8w.pl//plika.JPG

i dziala przez getDocumentBase();

0

Z tym, że plik musi być fizycznie w miejscu gdzie jest html, a nie w miejscu gdzie siedzi sobie aplet - a to nie musi być ta sama lokacja (obrazki często warto wrzucać sobie do podkatalogu od lokacji apletu). Ten drugi przypadek uzyskuje się przez getCodeBase(), a konkretnie przez new URL(getCodeBase(), nazwa_pliku);

Dodatkowo jeżeli ktoś chce użyć ten sam kod zarówno jako samodzielny program oraz jako aplet (aplet może być użyty jako panel w JFrame), to warto sobie zdefiniować taką metodę:

class MyApplet extends JApplet
{
/...
public URL getCodeBase()
{	//próbuje uzyskać dostęp do katalogu klasycznie wczytanej klasy apletu
	URL folder = this.getClass().getResource("."); 
	if(folder == null) //klasę wczytała przeglądarka lub appletviewer
		folder = super.getCodeBase(); //uzyskanie dostępu przez metodę apletu
	return folder;
}
//...
URL folderApletu = getCodeBase(); //zadziała zawsze
}

A potem normalnie używać do budowania URL najróżniejszych plików, które znajdować się mogą w katalogu apletu/programu lub dowolnym z podkatalogów.

0

Uważam, że obrazki dla apletu winny być w pliku jar

<applet code="MojAplet" archive="MojeArchiwum.jar" ...>
</applet>

Odczytuję się je tak samo

Image img=getImage(getCodeBase(),"images/ayers.jpg");

(w pliku jar winien być podkatalog images)
ale jest mniejszy ruch w sieci - tylko jedno żądanie.
pozdrawiam

0

ale nie rozumiem czemu tam jest taka durnowatość, że np:
index jest http://#####.w8w.pl/index.htm
a obrazek http://#####.w8w.pl//plika.JPG

przez to trzeba przeszukiwać fora i traci czas jak ktoś uczy się czegoś nowego.

0

Umieszczanie doskonale spakowanych plików obrazów (oraz filmów) w jednym pliku, to moim zdaniem jeden z powodów dla których programy w Javie są nazywane zakałą wydajności. Co z tego, że minimalizujemy ilość żądań sieciowych, skoro ucinamy sobie możliwość wczytywania równoległego? Kto powiedział, że łącze musi być tak niewydajne, że nie obsłuży wielokrotnych żądań? To moim zdaniem samoograniczanie. Dodatkowo pakowanie spakowanych mediów do pakowarki nie ma żadnego uzasadnienia z punktu widzenia ani odporności na błędy sieciowe, ani przesyłania mniejszej ilości danych (a jest wręcz odwrotnie).
Poza tym program powinien jak najkrócej być pozbawiony kontroli przez wmanewrowanie się w wywołania synchroniczne. Program czy aplet ma o wiele większe możliwości zrobienia "czegoś sensownego" w czasie gdy trzeba na coś oczekiwać niż JRE, które potrafi jedynie wyświetlić ikonkę javy i conajwyżej pokazać mniej czy bardziej prawdziwy pasek postępu.

W javie dopiero się uczę, ale co jakiś czas zaskakują mnie dziwne rozwiązania, których powody leżą najwyraźniej w bardzo starych koncepcjach czy kodzie, który już dawno nie jest aktualny. A chyba jedyną szansą dla tego języka jest likwidowanie utartych rozwiązań, które działają po prostu źle lub słabo. Np. Dlaczego w Javie nikt nie pisze odtwarzarek video czy rzeczy, które większość ludzi robi w "easy" flashu?
Być może dlatego, że utrudnia to sama Java. Ale czy na pewno? Może to tylko mit? Przecież Java ma teoretycznie o wiele większe możliwości. A Przynajmniej tak mi się na razie wydaje. Zresztą skoro Sony potrafiło napisać MMO Star Wars Galaxies oraz obsługę Blu-ray Disk w czystej w Javie, to czemu nie mają działać inne rzeczy?

0

trochę w tym racji jest Olamagato, dobra teraz coś z innej beczki

więc tak:
System.currentTimeMillis(); tutaj przypada na jedną sekundę 1000 jednostek
System.nanoTime() tutaj jest o wiele większa dokładność

takie pytanie jak pobrać rodzielczość jednej sekundy dla tego drugiego tak jak jest np w c++ np:
QueryPerformanceFrequency(&TimerFrequency);
coś w tym stylu dla javy

1 użytkowników online, w tym zalogowanych: 0, gości: 1