Nie wczytuje obrazka do panelu

0

Witam

Mam clase Panel w osobnym pliku, który dodaje do apletu. W klasach tych mam wczytywanie obrazków. Jak odpalam w NetBeansie wszystko działa poprawnie ale gdy wrzuce na serwer to wyskakuje błąd "acces denied (java.io.filepermision obrazek.gif read).
Bład ten jest wywołany tym, że aplet nie ma możliwości czytania z komputerów lokalnych ale czemu nie chce wczytać również z serwera tym bardziej, że w klasie aplet wczytuje bez problemu i błędów. Będę wdzięczny za jakąkolwiek pomoc.
Oto część kodu:

KLASA PANELU

public class panel extends JPanel {

    Image obraz;
    public panel() {
   
        setSize(123,43);
        obraz = Toolkit.getDefaultToolkit().getImage("obrazek.gif");
       
        MediaTracker trop = new MediaTracker(this);
        trop.addImage(obraz,1);
        try {trop.waitForID(0);}
        catch (InterruptedException e) {}
        
    }

    @Override
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.drawImage(obraz, 0, 0, this);
       
    }
0

Ale Twój kod nie czyta obrazka z serwera, tylko z komputera lokalnego.

...=getImage(getCodeBase(),"obrazek.gif");
//ewentualnie
...=getImage(getDocumentBase(),"obrazek.gif");

Poczytaj w dokumentacji, jakie katalogi na serwerze wskazują te metody.

0

W klasie Apletu mam tak jak piszesz czyli :

... obraz[1] = getImage(getDocumentBase(),"kwiat2.gif"); ... itd

lecz jak zrobię tak w klasie panelu to wyskakuje błąd, że nie może znależć getDocumentBase.

Nie wiem czemu w klasie apletu dziala prawidłowo, a dla klasy panelu już robi problemy.

0

Każda klasa ma swoje metody, w klasie String też nie ma metody getDocumentBase() i zapewne Cię to nie dziwi. Musisz odczytać pliki graficzne w klasie Aapletu (najlepiej w jej metodzie init()) i przekazać do panelu.

0

Fakt nie dziwi mnie to :) . Tylko że ja nie wiem jak to przekazać i nie wiem jak rysowac na panelu w aplecie, szukam szukam i nie moge nic znaleźć. Mój problem pewnie wydaje się być ort! ale ja już przestaje myśleć logicznie :( od przeglądania internetu i książek.

0

Pytanie zasadnicze, czy potrzebujesz drugi panel? Sam aplet jest klasy Panel, a dokładniej, dziedziczy po niej.

0

Panel jest mi potrzebny, muszę wstawić na niego obrazek a potem ewentualnie rysować na nim. Problem polega na tym, że nie wiem jak się do niego dostać czy to z metody init() lub paint(). Tak czy inaczej dzięki wielkie za zainteresowanie.

0

Nowy panel tworzysz w jakiejś metodzie apletu, np init(). Zrób tak:

//w klasie apletu
panel pan=new panel(this);

public class panel extends JPanel {
 
    KlasaApletu okno;
    public panel(KlasaApletu okno) {
        this.okno=okno;
        setSize(123,43);

 
    }
 
    @Override
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        if(okno.obraz!=null)
        {
            g.drawImage(okno.obraz, 0, 0, this);
        }
 
    }

a wczytywanie obrazka przenieś do metody init() apletu.

0

W czasie jak mi odpowiedziales, szukałem tu na forum i znalazłem i zrobiłem tak : i działa !!!!!

import java.awt.Graphics;
import javax.swing.JPanel;

public class panel extends JPanel {
fuksja fParent = null;

panel (fuksja parent) {
fParent = parent;
setSize(123,43);
}

@Override
public void paintComponent (Graphics g) {
super.paintComponent (g);
g.drawImage (fParent.obrazbufor1,0,0,this);
 
    

}

czyli po twojemu :) .

Dzięki wielkie za cierpliwość i wielką pomoc !!!!

0

Mimo wszystko mam jeszcze jedno pytanie jeśli można, a mienowicie czemu aby panel ten byl widoczny w aplecie muszę go dodać do innego panelu:

  p2.setLayout(null);
  p2.setBounds(rozmiarx+137, rozmiary+100, 123, 43);
  add(p2);
  p2.add(p[1]);

 // p2 nowy panel tworzony w aplecie  ,   p[1] panel o którym mowa powyżej

Kiedy robię tak:

  p[0].setLayout(null);
  p[0].setBounds(rozmiarx, rozmiary+100, 123, 43);
  kontener.add(p[0]);

albo
p[0].setLayout(null);
p[0].setBounds(rozmiarx, rozmiary+100, 123, 43);
add(p[0]);

Panel ten nie wyświetla sie .

0

Niezupełnie po mojemu, ja sprawdzam czy obrazek został wczytany.

    public void paintComponent (Graphics g) {
    super.paintComponent (g);
    if(fParent.obrazbufor1!=null)
    {
         g.drawImage (fParent.obrazbufor1,0,0,this);
    }
       
   }

Nie rozumiem Twoich przykładów, wystarczy gdy dodasz nowy panel do apletu.

0

Zgadza się ja nie sprawdzam, ale chodziło o sam sposób, a co do pytania to wlaśnie tak robie:

w klasie apletu : panel p[] = new panel[3];

w metodzie init() : p[0] = new panel(this);
p[0].setLayout(null);
p[0].setBounds(rozmiarx, rozmiary+100, 123, 43);
add(p[0]); // dodaje do apletu

i mimo wszystko nie chce go pokazać.

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