Użycie apletu Javy w HTML

0

Hej. Tak jak w temacie: mam problem z użyciem apletu w HTML-u. Aplet jest już gotowy, a ja mam tylko problem z odpaleniem go przez HTML.Tu jest kod źródłowy apletu:

package pierwszy_projekt;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.awt.image.*;
import java.util.*;
import java.net.*;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2009</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class Snieg
extends Applet
implements Runnable {
boolean isStandalone = false;


//BorderLayout borderLayout1 = new BorderLayout();
int wysokosc, szerokosc;
int szybkoscX[], szybkoscY[], platkiX[], platkiY[];
int liczbaPlatkow = 100;
int wielkoscPlatka = 5;
Random r = new Random();
Image img;
Graphics gDC;


//Get a parameter value
public String getParameter(String key, String def) {
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
}

//Construct the applet
public Snieg() {
}

//Initialize the applet
public void init() {
wysokosc = getHeight();
szerokosc = getWidth();
szybkoscX = new int[liczbaPlatkow];
szybkoscY = new int[liczbaPlatkow];
platkiX = new int[liczbaPlatkow];
platkiY = new int[liczbaPlatkow];

for (int i = 0; i < liczbaPlatkow; i++){
szybkoscY[i] = r.nextInt(5) + 1;
int dir = (r.nextInt(2)==0)?-1:1;
szybkoscX[i] = dir * (r.nextInt(10) + 1);
platkiX[i] = r.nextInt(szerokosc - 1);
platkiY[i] = r.nextInt(wysokosc - 1);
}
img = getImage(getDocumentBase(), getParameter("plik"));
gDC = getGraphics();
}


public void run(){
while(true){
gDC.setColor(Color.WHITE);
gDC.drawImage(img, 0, 0, this);
for(int i = 0; i < liczbaPlatkow; i++){
int dir = (r.nextInt(5)==0)?-1:1;
szybkoscX[i] = dir * szybkoscX[i];
platkiX[i] += szybkoscX[i];
platkiY[i] += szybkoscY[i];
if ((platkiY[i] > szerokosc) || (platkiX[i] < 0))
szybkoscX[i] = - szybkoscX[i];
if (platkiY[i] > wysokosc){
szybkoscY[i] = r.nextInt(5) + 1;
dir = (r.nextInt(2)==0)?-1:1;
szybkoscX[i] = dir * (r.nextInt(10) + 1);
platkiX[i] = r.nextInt(szerokosc - 1);
platkiY[i] = r.nextInt(10);
} gDC.fillOval(platkiX[i], platkiY[i], wielkoscPlatka, wielkoscPlatka);
} try{
Thread.sleep(100);
} catch (
InterruptedException e){
}
}
}
/* try {
jbInit();
}
catch (Exception e) {
e.printStackTrace();
}*/


//Component initialization
private void jbInit() throws Exception {
}


//Start the applet
public void start() {
Thread thread = new Thread (this);
thread.start();
}

//Stop the applet
public void stop() {
}


//Destroy the applet
public void destroy() {
}


//Get Applet information
public String getAppletInfo() {
return "Applet Information";
}


//Get parameter info
public String[][] getParameterInfo() {
return null;
}
}
 

Mój plik w HTML-u wygląda tak:

 
//Rozdział 5 zad 2
<html>

<head>

</head>

<body>

<applet
     code = "Snieg.class"
	 width = "320"
	 height= "200">
</applet>
</body>

</html>

Gdy uruchamiam ten plik HTML w appletviewer przez cmd wyskakuje mi w Javie, że "Applet not initialized", natomiast w cmd pisze mi, że nie znaleziono klasy Snieg. Z tego co szukałem na necie trzeba podobno dodać parametr ze zdjęciem do html-a. Napisałby mi ktoś jak to polecenie ma mniej więcej wyglądać ? Z góry dzięki.

0

Jak dodasz znaczniki kolorujące i sformatujesz kod, to Ci napiszę co trzeba zrobić.

0

Aplet jest już gotowy, a ja mam tylko problem z odpaleniem go przez HTML.

i będziesz miał :) Jak nie ty, to dowolna osoba, która go odpali i nie będzie miała zainstalowanego pluginu. Od apletów Javy w przeglądarkach się już odchodzi.

A to co robisz, można bardzo prosto zrobić używając JavaScriptu, oraz elementu<canvas>:
http://www.html5canvastutorials.com/tutorials/html5-canvas-bursting-particle-effect/
(chyba mniej więcej podobnego coś masz).

0

Edytowałeś post, a znaczników "kolorujących" jak nie było, tak nie ma.

0

Po co ci jakieś znaczniki kolorujące ? Z tego co mi mówił nauczyciel, to (podobno) wystarczy dodać jakiś parametr z obrazkiem i będzie banglać I btw. nie wiem skąd wziąłeś takie słabe określenie jak "znaczniki kolorujące". 3 lata robię w HTML-u i ani razu czegoś takiego nie słyszałem. Kolory dla znaczników i treści robię normalnie w CSS.

0

Omg. Znaczniki są po to by kod na forum ładnie wyglądał, np tak:

import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.util.*;

public class Grenada extends JApplet
{
    public void init()
    {
        add(new Flaga()); 
    }
    class Flaga extends JPanel
    {
        public void paintComponent(Graphics g)
        {
            Graphics2D g2 = (Graphics2D)g;
                      
            RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
            g2.setRenderingHints(rh);              
            
            g2.setColor(Color.RED);            
            g2.fillRect(0,0,1000,600);
            
            g2.setColor(new Color(0,153,0)); //zielony
            int[] x1 = {80,80,500};
            int[] y1 = {80,520,300};            
            g2.fillPolygon(x1,y1,3);
           
            int[] x2 = {920,920,500};
            g2.fillPolygon(x2,y1,3);
                        
            GeneralPath path = new GeneralPath();
            path.moveTo(200.0,300.0);
            path.quadTo(230.0,270.0,260.0,300.0);
            path.quadTo(230.0,330.0,200.0,300.0);
            g2.rotate(45.0,200.0,300.0);
            g2.setColor(Color.RED);
            g2.fill(path);
            path = new GeneralPath();
            path.moveTo(160.0,300.0);
            path.quadTo(230.0,240.0,300.0,280.0);
            path.quadTo(250.0,270.0,200.0,300.0);
            path.quadTo(250.0,330.0,300.0,320.0);
            path.quadTo(230.0,360.0,160.0,300.0);
            g2.setColor(new Color(255,204,0)); //pomarańczowy
            g2.fill(path);
            g2.rotate(-45.0,200.0,300.0);
            
            g2.setColor(new Color(255,204,0)); //pomarańczowy
            int[] x3 = {80,920,500};
            int[] y3 = {80,80,300};
            g2.fillPolygon(x3,y3,3);
            
            int[] y4 = {520,520,300};
            g2.fillPolygon(x3,y4,3);
            
            g2.setColor(Color.RED);
            g2.fillOval(450,250,100,100);
            
            g2.setColor(new Color(255,204,0)); //pomarańczowy
            g2.translate(500,300);
            int x5[] = new int[10];
            int y5[] = new int[10];
            for(int i=0;i<5;i++)
            {
                double angle = i*72 - 90.0;
                x5[2*i] = (int)(48*Math.cos(Math.toRadians(angle)));
                y5[2*i] = (int)(48*Math.sin(Math.toRadians(angle)));
                angle+=36.0;
                x5[2*i+1] = (int)(18*Math.cos(Math.toRadians(angle)));
                y5[2*i+1] = (int)(18*Math.sin(Math.toRadians(angle)));                
            }
            g2.fillPolygon(x5,y5,10);
            
            for(int i=0;i<10;i++)
            {
                x5[i] = (int)(0.8*x5[i]);
                y5[i] = (int)(0.8*y5[i]);
            }
            
            g2.translate(0,-260);
            g2.fillPolygon(x5,y5,10);
            
            g2.translate(-200,0);
            g2.fillPolygon(x5,y5,10);
            
            g2.translate(400,0);
            g2.fillPolygon(x5,y5,10);

            g2.translate(0,520);
            g2.fillPolygon(x5,y5,10);
            
            g2.translate(-200,0);
            g2.fillPolygon(x5,y5,10);
            
            g2.translate(-200,0);
            g2.fillPolygon(x5,y5,10);          
        }
    }
}
<!doctype html>
<html>
<head>
  <meta charset="iso-8859-2">
  <title>Grenada</title>
  <link rel="stylesheet" type="text/css" href="../style.css">
</head>
<body>
<p>
<h3><center>Flaga Grenady</center></h3>
<hr>
<applet width="1000" height="600" code="Grenada" archive="grenada.jar">
</applet>
<body>
</html>
0

Tobie chodziło o znaczniki na forum ;) To sorry, źle Cię zrozumiałem , bo nie korzystam zbyt często z tego forum. Zaraz na to zobaczę.

0

Teraz chyba jest ok.

0

Nauczyciel dobrze mówił, tu

img = getImage(getDocumentBase(), getParameter("plik"));

próbujesz odczytać plik, którego nazwa jest jednym z parametrów apletu, a tego parametru nie podałeś.

<applet
     code = "Snieg.class"
     plik = "nazwaPlikuGraficznego"
     width = "320"
     height= "200">
</applet>
0

Hmm, nadal mi wyskakuje w cmd, że java.lang.NoClassDefFoundError: Snieg (wrong name: pierwszy_projekt/Snieg). Trochę to dziwne, skoro mam ten plik Snieg.class
I tak nawiasem, to w Notepadzie C++ ten paramter plik w HTML-u wyświetla się na czarno, ale to chyba ok ?

1

Bo nie masz takiej klasy, Twoja klasa nazywa się pierwszy_projekt.Snieg

<applet
     code = "pierwszy_projekt.Snieg"
     plik = "nazwaPlikuGraficznego"
     width = "320"
     height= "200">
</applet>

(słowo class w znaczniku code jest zbyteczne).
Plik Snieg.class musi być w folderze pierwszy_projekt.

0

Okej, teraz działa świetnie. Wielkie dzięki :)

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