Java - problem z appletem (ZEGAR)

0

Witam

Jest applet ktory niestety ale nie chce sie odtworzyc w programie "Applet viewer" ktory jest wbudowany w Netbeans i z ktorego testuje sie zazwyczaj osiagniecia w appletach, tym razem nie wiem czemu ale wywala mi :

init:
deps-jar:
compile-single:
run-applet:
Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
        at zegarek.paint(zegarek.java:36)
        at sun.awt.RepaintArea.paintComponent(RepaintArea.java:248)
        at sun.awt.X11.XRepaintArea.paintComponent(XRepaintArea.java:56)
        at sun.awt.RepaintArea.paint(RepaintArea.java:224)
        at sun.awt.X11.XComponentPeer.handleEvent(XComponentPeer.java:645)
        at java.awt.Component.dispatchEventImpl(Component.java:4031)
        at java.awt.Container.dispatchEventImpl(Container.java:2024)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
        at zegarek.paint(zegarek.java:36)
        at java.awt.Container.update(Container.java:1730)
        at sun.awt.RepaintArea.updateComponent(RepaintArea.java:239)
        at sun.awt.X11.XRepaintArea.updateComponent(XRepaintArea.java:43)
        at sun.awt.RepaintArea.paint(RepaintArea.java:216)
        at sun.awt.X11.XComponentPeer.handleEvent(XComponentPeer.java:645)
        at java.awt.Component.dispatchEventImpl(Component.java:4031)
        at java.awt.Container.dispatchEventImpl(Container.java:2024)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
        at zegarek.paint(zegarek.java:36)
        at java.awt.Container.update(Container.java:1730)
        at sun.awt.RepaintArea.updateComponent(RepaintArea.java:239)
        at sun.awt.X11.XRepaintArea.updateComponent(XRepaintArea.java:43)
        at sun.awt.RepaintArea.paint(RepaintArea.java:216)
        at sun.awt.X11.XComponentPeer.handleEvent(XComponentPeer.java:645)
        at java.awt.Component.dispatchEventImpl(Component.java:4031)
        at java.awt.Container.dispatchEventImpl(Container.java:2024)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
        at zegarek.paint(zegarek.java:36)

Tego jest wiecej.., ale NIE MA sensu wszystkiego wywalac, zreszta co chwile pokazuje sie nowa linijka ( polowa z teog jest czerwona i polowa niebieska )

Jak daje "run debug file" <-- czyli ten sam kod co wczesniej

init:
deps-jar:
compile-single:
ERROR: transport error 202: gethostbyname: unknown host ["transport.c",L41]
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) ["debugInit.c",L500]
FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=JVMTI_ERROR_INTERNAL(113)
JDWP exit error JVMTI_ERROR_INTERNAL(113): No transports initialized
Java Result: 1
debug-applet:
BUILD SUCCESSFUL (total time: 3 seconds)

Niestety ale w w tym wbudowanym programie ktory mowi nam jaki jest wynik kodu, czyli dzialajacy applet jest szaro.. i nic nie widac.., nie wiem dlaczego :(

0

Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException at zegarek.paint(zegarek.java:36)

Tłumacząc na język polski: w pliku zegarek.java w linii 36 program odwołuje się do obiektu, który jest nullem. Musisz sprawdzić jaki to obiekt i czy jest gdzieś tworzony.

0
.....
34  currentDate = new Date();
35        
36    formatter.applyPattern("s");
37      try {
38        s = Integer.parseInt(formatter.format(currentDate));
......

36 linia...

0

Gdzieś wcześniej musisz mieć: formatter = new ....

0
15:    SimpleDateFormat formatter;  // format w jakim ma być parsowana aktualna data/czas
36:        formatter.applyPattern("s");
38:            s = Integer.parseInt(formatter.format(currentDate));
42:        formatter.applyPattern("m");
44:            m = Integer.parseInt(formatter.format(currentDate));
48:        formatter.applyPattern("h");
50:            h = Integer.parseInt(formatter.format(currentDate));
0

Tworzysz zmienna referencyjna, a nie sam obiekt - powinno byc cos w stylu tego, co napisal Luuki:

SimpleDateFormat formatter = new SimpleDateFormater(...?);

pozdrawiam
johny

0

czyli to jest zle ?

 public void paint(Graphics g) {
        int xg, yg, xm, ym, xs, ys;
        int s, m, h;
        int xcenter = 145, ycenter = 100;

        currentDate = new Date();
        
        formatter.applyPattern("s");        <-- linia 36
        try {
            s = Integer.parseInt(formatter.format(currentDate));
        } catch (NumberFormatException n) {
            s = 0;
        }
        formatter.applyPattern("m");
        try {
            m = Integer.parseInt(formatter.format(currentDate));
        } catch (NumberFormatException n) {
            m = 0;
        }    
        formatter.applyPattern("h");
        try {
            h = Integer.parseInt(formatter.format(currentDate));
        } catch (NumberFormatException n) {
            h = 0;
        }
    
0

Nie to, ze zle. Tylko formatter u ciebie to referencja, nie stworzony obiekt. Innymi slowy formatter = null, bo go nie stworzyles.

pozdrawiam
johny

0

Prawde mowiac to.. ja sie dopiero ucze i chcialem kod przeanalizowac ( dobry ), aby wiedziec wizualnie co sie zmienia, dlaczego itd.., i za bardzo nie wiem jak mam sie za to zabrac, co mam dodac i jak to ma mniej wiecej wygladac aby zegra byl widoczny ?

0
import java.util.*;
import java.awt.*;
import java.applet.*;
import java.text.*;

public class zegarek
        
extends Applet implements Runnable {
    int wxs; //definicja zmiennych dla g,m,s
    int wys;
    int wxm;
    int wym;
    int wxg;
    int wyg;
    SimpleDateFormat formatter;  // format w jakim ma być parsowana aktualna data/czas
    Font clockFaceFont;          // czcionka dla godzin na tarczy
    Date currentDate;            // pobieranie aktualnej daty/czasu
    Thread thread;				 // zdefiniowanie zdarzenia jakie ma zostać wykonane

    public void init() {
        int x,y;
        wxs = wys = wxm = wym = wxg = wyg;
        clockFaceFont = new Font("Tahoma", Font.PLAIN, 12);

        resize(300,200);              // rozmiar okna
    }

    // rysuje obiekt i okresla zmienne
    public void paint(Graphics g) {
        int xg, yg, xm, ym, xs, ys;
        int s, m, h;
        int xcenter = 145, ycenter = 100;

        currentDate = new Date();
        
        formatter.applyPattern("s");
        try {
            s = Integer.parseInt(formatter.format(currentDate));
        } catch (NumberFormatException n) {
            s = 0;
        }
        formatter.applyPattern("m");
        try {
            m = Integer.parseInt(formatter.format(currentDate));
        } catch (NumberFormatException n) {
            m = 0;
        }    
        formatter.applyPattern("h");
        try {
            h = Integer.parseInt(formatter.format(currentDate));
        } catch (NumberFormatException n) {
            h = 0;
        }
    
        // oblicza współrzędne wskazówek 
        xs = (int) (Math.cos(s * Math.PI / 30 - Math.PI / 2) * 45 + xcenter);
        ys = (int) (Math.sin(s * Math.PI / 30 - Math.PI / 2) * 45 + ycenter);
        xm = (int) (Math.cos(m * Math.PI / 30 - Math.PI / 2) * 40 + xcenter);
        ym = (int) (Math.sin(m * Math.PI / 30 - Math.PI / 2) * 40 + ycenter);
        xg = (int) (Math.cos((h*30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30
                   + xcenter);
        yg = (int) (Math.sin((h*30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30
                   + ycenter);
    
        // rysuje okręg i liczby godzin na tarczy
        g.drawArc(xcenter-50, ycenter-50, 100, 100, 0, 360);
        g.drawString("1", xcenter+17, ycenter-31);
        g.drawString("2", xcenter+32, ycenter-18);
        g.drawString("3", xcenter+40, ycenter+3);
        g.drawString("4", xcenter+35, ycenter+25);
        g.drawString("5", xcenter+19, ycenter+41);
        g.drawString("6", xcenter-3, ycenter+47);
        g.drawString("7", xcenter-25, ycenter+41);
        g.drawString("8", xcenter-39, ycenter+25);
        g.drawString("9", xcenter-46, ycenter+3);
        g.drawString("10", xcenter-39, ycenter-18);
        g.drawString("11", xcenter-25, ycenter-31);
        g.drawString("12", xcenter-5, ycenter-37);



        // rysuje linie wskazówek i okresla ich kolory
		g.setColor(Color.gray);
        g.drawLine(xcenter, ycenter, xs, ys);
        g.setColor(Color.blue);
        g.drawLine(xcenter, ycenter, xm, ym);
        g.setColor(Color.red);
        g.drawLine(xcenter, ycenter, xg, yg);
        
    }

    public void start() { //wywołanie zdarzenia
        thread = new Thread(this);
        thread.start();
    }



    public void run() {
        thread = new Thread(this);
        while (true) {
            try {
                thread.sleep(1000);
            } catch (InterruptedException e) {
            }
            repaint();
       		}
    	}
	public void stop() {
    thread = null;
  }

}

Oto kod i on nie chce dzialac.. [???]

Lepiej analizowac kod i uczyc sie przy poprawnym kodzie.. :(

Ps. Prosze o pomoc :(

0

Dodaj w metodzie init() to:

formatter = new SimpleDateFormat();

uruchom i zobacz czy nie ma wiecej bledow. Jak beda to napisz jakie - ja chwilowo nie mam mozliwosci przetestowac kodu.

pozdrawiam
johny

0
public void init() {
     int x,y;
     wxs = wys = wxm = wym = wxg = wyg;
     clockFaceFont = new Font("Tahoma", Font.PLAIN, 12);
     resize(300,200);              // rozmiar okna
     formatter = new SimpleDateFormat();
}

Po takiej modyfikacji u mnie działa.

0

Dziekuje za pomoc ;-)

Oboje mieliscie racje, chodzilo wlasnie o :

formatter = new SimpleDateFormat();

Juz widac zegar :)

0

Mam podobny problem.
Klase gółwną rozszerzam do poziomu applet'u dodaje awt i inne cuda.
Problem to z poziomu klasy package narysować coś w owym apllecie.

Klasa gółwna:

package test;

import java.applet.*;
import java.awt.*;
import java.awt.event.*;


public class glowna extends Applet
implements MouseListener, KeyListener//, Runnable
{
 public void init()
 {
  addMouseListener(this); 
  addKeyListener(this); 
  requestFocus( ); 
  setBackground(Color.white);
 }
 public void start( ) 
 { 
 } 

 public void paint(Graphics g) 
 { 
	 menu menu1=new menu();
	 menu1.dodaj(2,2,2,2);
	 
	 g.drawRect(2, 2, 2, 2);
 } 

 public void stop( ) 
 { 
 } 

 public void destroy( ) 
 { 
 }
 
 
 public void mouseClicked(MouseEvent e) {}
 public void mouseEntered(MouseEvent e) {}
 public void mouseExited(MouseEvent e) {}
 public void mousePressed(MouseEvent e) {}
 public void mouseReleased(MouseEvent e){}
 
 public void keyPressed(KeyEvent e) {}


 public void keyReleased(KeyEvent e) {}


 public void keyTyped(KeyEvent e) {}

}

2 klasa:

package test;

public class menu extends glowna
{
 int przyciski[][]=new int[50][4];
 int l_przyciski;
 public void menu()
 {
  l_przyciski=0;
 }
 public void dodaj(int x,int y,int w, int s)
 {
  przyciski[l_przyciski][0]=x;
  przyciski[l_przyciski][1]=y;
  przyciski[l_przyciski][2]=w;
  przyciski[l_przyciski][3]=s;
  l_przyciski++; 
  rysuj(x,y,w,s);
 }
 private void rysuj(int x, int y,int w, int s)
 {
	 super.getGraphics().drawRect(2, 2, 2, 2);  //<<------------------------------------------------  ???????????
 }
}
0

Wydawało mi się że rysujemy w przeładowanej metodzie
@PaiNt(Graphics g)

Najlepiej gdybyś napisał co jest nie tak i co ma to robić, bo ja z tego nic nie rozumiem:P

W ogóle kto zajmuje się programowaniem w wieczór wigilijny :D

0

Z tym wieczorem tak jakoś wyszło, lubie programować a że spać się nie chciało... :)
Chodzi mi o to że z poziomu całkiem innej klasy chcę dorysowac coś w applecie.
Już wpadlem na rozwiązanie. Przez metody przekazuje "Graphics g" i łanie za pomocą zmiennej wywołuje metody rysowania. Zapewne istnieje jakiś myk o którym nie wiem i da sie go wykorzystac :)

Plik A (klasa główna):

package test;

import java.applet.*;
import java.awt.*;
import java.awt.event.*;


public class glowna
extends Applet
{	
 menu menu1=new menu();
 public void init()
 { 
 }
 public void start( ) 
 { 
 } 

 public void paint(Graphics g) 
 {
  menu1.rysuj(20,20,20,20,g);   // <<<<<<<<<<<
 }

 public void stop( ) 
 { 
 } 
 public void destroy( ) 
 { 
 }
}

Plik B

package test;

import java.awt.*;

public class menu
{
 public void rysuj(int x, int y,int w, int s,Graphics g)
 {
  g.drawRect(x, y, w, s);  // <<<<<<<<<
 }
}
0

Najlepiej zrobić tak jak w zwykłych aplikacjach, czyli do aplety "podłączyć" własną przedefinowaną klase JPanel, gdzie spokojnie możemy sobie rysować co chcemy, a wywoływać to rysowanie wyżej czyli w głównej klasie apletu.
Chyba że w apletach jest inaczej niż w zwykłych aplikacjach, a sam jeszcze nie pisałem appletu:D

0

No to bardzo miło bo ja nigdy nie pisałem aplikacji :) Ale proszę o przykładowy kod jeżeli to nie sprawi porblemu.
Dzięki.

0

Oczywiście kod aplikacji :)

0
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JApplet;

/**
 *
 * @author el
 */
public class NewJApplet extends JApplet {

    private ApPanel panel;
    /**
     * Initialization method that will be called after the applet is loaded
     * into the browser.
     */
    public void init() {
        // TODO start asynchronous download of heavy resources
        panel = new ApPanel(new Point(0,0));
        add(panel);
        addMouseListener(new MouseListener(){

            public void mouseClicked(MouseEvent e) {
                panel.setp(new Point(e.getX(), e.getY()));
                panel.repaint();
            }

            public void mousePressed(MouseEvent e) {
                //throw new UnsupportedOperationException("Not supported yet.");
            }

            public void mouseReleased(MouseEvent e) {
//                throw new UnsupportedOperationException("Not supported yet.");
            }

            public void mouseEntered(MouseEvent e) {
//                throw new UnsupportedOperationException("Not supported yet.");
            }

            public void mouseExited(MouseEvent e) {
//                throw new UnsupportedOperationException("Not supported yet.");
            }

        });
    }

    // TODO overwrite start(), stop() and destroy() methods

}
import java.awt.Graphics;
import java.awt.Point;

/**
 *
 * @author el
 */
public class ApPanel extends javax.swing.JPanel{

    private Point p;

    public ApPanel(Point p)
    {
        this.p = p;
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawRect(p.x, p.y, 10, 10);
    }
    public void setp(Point p)
    {
        this.p = p;
    }


}

Niby działa pod Applet Viewer-em, wiec normalnie też powinno śmigać.
Ogólnie NIE MA co tłumaczyć, ale jak chodziło o coś innego to napisz. [browar]

0

ok. Dzięki wielkie :)

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