Wyjątek w programie obliczającym azymuty.

2015-01-25 00:09
0

Witam, mam za zadanie stworzyć program obliczający azymuty, z wykorzystaniem jakiegoś interfejsu.
Program się uruchamia, ale gdy naciskam na przycisk, mający zmienić tekst na przycisku obok na otrzymany wynik z obliczeń, wyskakują w konsoli błędy. Okienko w załączniku.
Oczywiście zaznaczam, że jestem lekko zielona (a nawet bardzo) w tym temacie ^^.
Z góry dziękuję za wszelką pomoc!
Oto kod:

public class obliczenia {

    double A=0;
    przyciski prz= new przyciski();
    double x1=Double.parseDouble(prz.x1.getText());
    double y1=Double.parseDouble(prz.y1.getText());
    double x2=Double.parseDouble(prz.x2.getText());
    double y2=Double.parseDouble(prz.y2.getText());                                  

    public obliczenia(){

        double cz=Math.atan((y2-y1)/(x2-x1));
        if ((y2-y1)>0){
            if ((x2-x1)>0) A=cz; if (A>400) A=A-400;
            if ((x2-x1)<0) A=200-cz; if (A>400) A=A-400;

            }
        if ((y2-y1)<0){
            if ((x2-x1)<0) A=200+cz; if (A>400) A=A-400;
            if ((x2-x1)>0) A=400-cz; if (A>400) A=A-400;
            }   }   }

------------------------------------------------------------------------------------
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JTextField;

import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class przyciski extends JPanel implements ActionListener{

        public static final int HEIGHT = 180;
        public static final int WIDTH = 200;
        private JButton Button1;
        private JButton Button2;
        public JTextField x1;
        public JTextField y1;
        public JTextField x2;
        public JTextField y2;

        public przyciski(){

        Button1 = new JButton("A");
        Button2= new JButton("LICZ");
        x1 = new JTextField("x1");
        y1 = new JTextField("y1");
        x2 = new JTextField("x2");
        y2 = new JTextField("y2");

        Button2.addActionListener(this);

        setLayout(new GridLayout(4,2));
        setPreferredSize(new Dimension(WIDTH, HEIGHT));

        add(x1);
        add(y1);
        add(x2);
        add(y2);
        add(Button1);
        add(Button2);

        }

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            Object source = e.getSource();

            if (source == Button2) {

            obliczenia obl= new obliczenia();
            try{
            Button1.setText(Double.toString(obl.A));
            }
            catch (NumberFormatException e2){}
            }   }}
--------------------------------------------------------------------------------
import javax.swing.JFrame;

public class okno extends JFrame{

public okno(){

    przyciski prz= new przyciski();

    add(prz);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pack(); //zmiejsz do rozmiaru panelu
    setVisible(true);
    }
}

---------------------------------------------------------------------------------
import java.util.Scanner;

public class test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        new okno();     
    }}
-----------------------------------------------------------

Oraz imponujący zestaw błędów:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "x1"
    at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
    at java.lang.Double.parseDouble(Unknown Source)
    at obliczenia.<init>(obliczenia.java:10)
    at przyciski.actionPerformed(przyciski.java:51)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$200(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
edytowany 1x, ostatnio: Shalom, 2015-01-25 02:47

Pozostało 580 znaków

2015-01-25 02:48
1

W angielskim to też chyba jesteś lekko zielona jak nie gorzej...

java.lang.NumberFormatException: For input string: "x1"

Co znaczy że przekazałaś do parseDouble stringa x1. A parseDouble zakłada że używa go ktoś inteligentny i przekazuje mu tam liczby. Niestety w tym przypadku bardzo sie pomylił i musiał wysypać program... Ciekawi mnie czego sie tu spodziewałaś. Że program sam sie domyśli dla jakich wartości miał to policzyć? o_O


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
edytowany 1x, ostatnio: Shalom, 2015-01-25 02:51
Shalom uważaj, bo zaraz dostaniesz bana za obrażanie ;p - karolinaa 2015-01-25 11:18
I jeszcze sam sobie pewnie będę go musiał nałożyć... :P - Shalom 2015-01-25 11:53

Pozostało 580 znaków

2015-01-25 12:04
0

Double'owy parserek nie lubi przecinków. Dlatego, albo podawaj w JTextFieldach liczby z częścią dziesiętną oddzieloną kropką, albo zamieniaj wszystkie przecinki na kropki w kodzie, np.: Double.parseDouble(String.replace(",", "."));.


The quieter you become, the more you are able to hear.
Przecież ona tam wysłała do tego parsera x1 a nie liczbę z przecinkiem :D - Shalom 2015-01-25 12:34
O matko, faktycznie... Nie zauważyłem O.O - Gjorni 2015-01-25 12:42

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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