Java - problem z appletem (ZEGAR)

Odpowiedz Nowy wątek
2006-09-22 18:21
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 niema 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 :(

Pozostało 580 znaków

2006-09-22 18:56
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.


Pozostało 580 znaków

2006-09-22 19:06
0
.....
34  currentDate = new Date();
35        
36    formatter.applyPattern("s");
37      try {
38        s = Integer.parseInt(formatter.format(currentDate));
......

36 linia...

Pozostało 580 znaków

2006-09-22 19:10
0

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


Pozostało 580 znaków

2006-09-22 19:14
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));

Pozostało 580 znaków

2006-09-22 19:16
0

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

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

pozdrawiam
johny


You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-09-22 19:25
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;
        }

Pozostało 580 znaków

2006-09-22 19:27
0

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

pozdrawiam
johny


You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-09-22 19:37
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 ?

Pozostało 580 znaków

2006-09-22 20:07
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 :(

Pozostało 580 znaków

2006-09-22 20:24
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


You need to learn how to walk
before you can run

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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