Witam mam taki problem a mianowicie robię gierkę (nic szczególnego,dopiero się uczę) chciałbym wczytać obrazki z folderu typu ściana,podłoga,przeciwnik.Pisze w javie w NetBeans 7.3.Jak niby wczytuje moje obrazki to nie pojawią się w ogóle, jest dobrze jak w programie np. przeciwnik to kwadrat czy okrąg.
Jak by ktoś wiedział jak wczytać te obrazki byłbym wdzięczny za pomoc
Możesz przetłumaczyć opis problemu na język polski?
Mam problem aby wczytać obrazki z folderu do apletu
Jaka wersja Javy? W wersji 1.7.0_25 nastąpiła zmiana i metoda getCodeBase() zwraca null dla apletów uruchamianych lokalnie => standardowy sposób getImage(getCodeBase(),nazwaObrazka) nie działa w przeglądarkach, jeśli plik HTML z apletem nie jest pobierany z sieci. Dla testowania apletów napisałem własną metodę getCodeBase()
public URL getCodeBase()
{
URL url = super.getCodeBase();
if(url != null)
{
return url;
}
try
{
String s = "file:"+getDocumentBase().getPath();
int index = s.lastIndexOf("/");
s = s.substring(0,index+1);
return new URL(s);
}
catch(Exception e)
{
return null;
}
}
Nadal nie chce mi wyświetlać obrazków robię tak:
exit = getImage(getDocumentBase(),"obrazki/exit.gif");
i tak:
exit = getImage(getCodeBase(),"obrazki/exit.gif");
nie wiem czy źle to robię?
- Jaka wersja Javy?
- W którym miejscu apletu jest wiersz getImage(...)?
- Której wersji metody getCodeBase() używasz, tej ze standardowej biblioteki czy tej którą podałem w poprzednim poście?
- Uruchamiaj aplet w przeglądarce (ewentualnie w programie appletviewer).
- nie wiem czy o to chodzi:
javafx-simples-2.2.7
jdk-7u15
2.wiersz getImage(...) jest w "public void init()"
3. nie stosuje tej co podałeś, mam taką bibliotekę import java.awt.Image;
4. Jak mam uruchamiać ten aplet w przeglądarce? jak uruchamiam ten program to uruchamia mi się tylko okienko z programem a nie przeglądarka
może coś źle rozumiem proszę o wyrozumiałość jestem początkującym w programowaniu
Żeby zobaczyć wersję Javy wpisz w konsoli polecenie java -version.
Przykładowe oglądanie apletu w przeglądarce:
Stwórz plik HTML z poniższą zawartością
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
<title>Tester</title>
</head>
<body>
<p>
<applet width="..." height="..." code="...">
</applet>
<p>
<body>
</html>
Kropki zamień nazwą klasy apletu i wymiarami obszaru, który przeznaczasz na aplet.
<applet width="600" height="400" code="MyFirstApplet">
Otwórz ten plik w przeglądarce. W zależności od konfiguracji będzie to podwójne kliknięcie lub uruchomienie przeglądarki i wybranie z menu pozycji Otwórz plik w większości (we wszystkich?) przeglądarkach jest to Ctrl+O.
Przykład wczytywania grafiki za pomocą biblioteki awt:
public class DisplayImageExample extends Applet
{
Image img1;
public void init(){
img1 = getImage(getDocumentBase(), getParameter("Scieżka do rysunku"));
}
public void paint(Graphics g){
g.drawImage(img1, 100,100,this);
}
}
co tu może być problem hmmm... ze złą scieżka do rysunku
weż stwórz w netbeans w projekcie nowy Package, nazwij images lub rysunki i tam umiesc rysunek po tym sciezka będzie tak wygladała:
/images/rysunek
mam wersje : java version 1.7.0_15
mam utworzony package z obrazkami tak jak sugerował Madaoo.
a kod wygląda tak:
package gierka;
import java.awt.Color;
import java.applet.Applet;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Timer;
/**
*
* @author Tomek
*/
public class Program extends Applet implements KeyListener{
int rozmiar1 = 14*40;
int rozmiar2 = 10*40;
static Applet applet;
Zadanie zadanie = new Zadanie();
Timer timer1 = new Timer();
Timer timer2 = new Timer();
Image bufor;
Graphics bg;
static int stan = 0;
Image wrog;
Image grunt;
Image brick;
Image face;
Image exit;
/**
*
*/
@Override
public void init() {
applet = this;
applet.addKeyListener(this);
applet.setSize(rozmiar1,rozmiar2);
applet.setBackground(Color.LIGHT_GRAY);
bufor = createImage(rozmiar1,rozmiar2);
bg = bufor.getGraphics();
timer2.scheduleAtFixedRate(zadanie, 10, 100);
wrog = getImage(getDocumentBase(),"obrazki/wrog.jpg");
brick = getImage(getDocumentBase(),"/brick.jpg");
exit = getImage(getCodeBase(),"/obrazki/exit.gif");
face = getImage(getDocumentBase(),"obrazki/face.gif");
zadanie.zrobPlansze();
}
/**
*
* @param g
*/
@Override
public void update(Graphics g)
{
bg.clearRect(0, 0, rozmiar1, rozmiar2);
paint(bg);
g.drawImage(bufor, 0, 0, applet);
}
/**
*
* @param g
*/
@Override
public void paint(Graphics g){
switch (stan){
case 0:
Font font = new Font("New Times Roman",Font.BOLD,30);
g.setColor(Color.RED);
g.drawString("Jeżeli chcesz zagrac wcisnji ' T '",50 , 100);
g.setFont(font);
break;
case 1:
rysujPlansze(g);
break;
case 2:
koniec1(g);
//Font font = new Font("New Time Roman",Font.BOLD,24);
g.setColor(Color.yellow);
//g.setFont(font);
break;
case 3:
koniec2(g);
//case 't':
// stan=1;
//break;
break;
}
}
public void koniec1(Graphics g){
g.drawString("KONIEC1", 25, 100);
}
public void koniec2(Graphics g){
g.drawString("HA HA HA Przegrałes ", 20, 100);
g.drawString("jak chcesz jeszcze raz to wciśnji ' R '", 20, 200);
}
public void rysujPlansze(Graphics g){
for(int i=0;i<zadanie.plansza.length;i++){
for(int j=0;j<zadanie.plansza[0].length;j++){
if(zadanie.plansza[i][j]==4){
// g.drawImage(face, 40*j, 40*i, this);
g.setColor(Color.CYAN);
g.fillOval(40*j, 40*i, 40, 40);
}
/*if(zadanie.wrog[i][j]==3){
g.setColor(Color.GREEN);
g.fillRect(40*j, 40*i, 40, 40);
}*/
if(zadanie.wyjscie[i][j]==2){
exit = getImage(getDocumentBase(),"obrazki/exit.gif");
g.drawImage(exit, 40*j, 40*i, this);
// g.setColor(Color.YELLOW);
// g.fillRect(40*j, 40*i, 40, 40);
}
switch(zadanie.plansza[i][j]){
//case 0:
// g.drawImage(wrog, 40*j, 40*i, this);
// break;
case 1:
g.drawImage(brick, 40*j, 40*i, this);
// g.setColor(Color.RED);
//g.fillRect(40*j, 40*i, 40, 40);
break;
/* case 3:
g.setColor(Color.GREEN);
g.fillRect(40*j, 40*i, 40, 40);
break;*/
case 3:
// g.drawImage(wrog, 40*j, 40*i, this);
g.setColor(Color.GREEN);
g.fillOval(40*j, 40*i, 40, 40);
break;
/* case 4:
g.setColor(Color.CYAN);
g.fillOval(40*j, 40*i, 40, 40);
break;*/
}
}
}
}
@Override
public void keyTyped(KeyEvent arg0) {
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
/**
*
* @param arg0
*/
@Override
public void keyPressed(KeyEvent arg0) {
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
switch(arg0.getKeyChar()){
case 't':
stan=1;
break;
case 'r':
System.out.println("fdgfd");
stan=0;
break;}
switch(arg0.getKeyCode()){
case 37:
zadanie.ruszaj('l');
break;
case 38:
zadanie.ruszaj('g');
break;
case 39:
zadanie.ruszaj('p');
break;
case 40:
zadanie.ruszaj('d');
break;
}
}
@Override
public void keyReleased(KeyEvent arg0) {
// throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
może w ten sposób się uda znaleźć przyczynę problemu, sorry może mało czytelny ten kod
wrog = getImage(getDocumentBase(),"obrazki/wrog.jpg");
brick = getImage(getDocumentBase(),"/brick.jpg");
exit = getImage(getCodeBase(),"/obrazki/exit.gif");
face = getImage(getDocumentBase(),"obrazki/face.gif");
/// gdzies tam hen daleko :P
exit = getImage(getDocumentBase(),"/obrazki/exit.gif");
poprwaic ścieżki ;) na :
wrog = getImage(getDocumentBase(),"/obrazki/wrog.jpg"); //< lub images nie wiem jak nazwales tą paczke z rysunkami
brick = getImage(getDocumentBase(),"/obrazki/brick.jpg");
exit = getImage(getCodeBase(),"/obrazki/exit.gif");
face = getImage(getDocumentBase(),"/obrazki/face.gif");
/// gdzies tam hen daleko :P
exit = getImage(getDocumentBase(),"/obrazki/exit.gif");
gierka.obrazki wziąłem folder obrazki i przeciągnąłem na package gierka i sam utworzył drugi o tej nazwie gierka.obrazki
ok działa powinno być tak face = getImage(getCodeBase(),"gierka/obrazki/face.gif");
dzięki wielkie za pomoc