Behöver hjälp med Java programmering.

Permalänk
Medlem

Behöver hjälp med Java programmering.

Jag håller på med ett skolprojekt där vi ska skapa ett kund- och orderhanteringsprogram och har stött på ett problem. När jag vill spara en order har jag gjort en metod som ska köras när man trycker på knappen "spara order" i gränssnittet, men den verkar inte köras. Problemet är att jag får ett felmeddelande:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at glasramh.UiKundReg.sparaOrderKnapp_actionPerformed(UiKundReg.java:632)
at glasramh.UiKundReg.mav$sparaOrderKnapp_actionPerformed(UiKundReg.java)
at glasramh.UiKundReg$2.actionPerformed(UiKundReg.java:283)
at java.awt.Button.processActionEvent(Button.java:388)
at java.awt.Button.processEvent(Button.java:356)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
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:158)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at glasramh.UiKundReg.sparaOrderKnapp_actionPerformed(UiKundReg.java:632)
at glasramh.UiKundReg.mav$sparaOrderKnapp_actionPerformed(UiKundReg.java)
at glasramh.UiKundReg$2.actionPerformed(UiKundReg.java:283)
at java.awt.Button.processActionEvent(Button.java:388)
at java.awt.Button.processEvent(Button.java:356)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
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:158)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Process exited with exit code 0.

När vi söker på felmeddelandet har vi fått fram att vi försöker använda ett objekt som inte är skapat än, men vi vet inte hur vi ska ändra koden för att den ska funka. Nedan bifogas koden till metoden:

//kod i klassen UiKundReg
private void sparaOrderKnapp_actionPerformed(ActionEvent e) {
String orderId = orderNummerFält.getText();
String kundId = kundNrFält.getText();
ArrayList<OrderRad> lista = new ArrayList();
lista.addAll(order.getOrderRad()); //DET ÄR HÄR VI FÅR ETT NULL POINTER EXCEPTION
Order tmpOrder = new Order(orderId, lista);
if(kundNrFält.getText() == null){
responsLabel4.setText("Var god fyll i ordernummer");
}
else if(kundId.length() == '0'){
responsLabel4.setText("Var god fyll i kundnummer");
}
else if(lista.isEmpty() == true){
responsLabel4.setText("Var god lägg orderrad först");
}
else{
controller.läggInNyOrder(kundId, tmpOrder);
responsLabel4.setText("Order sparad.");
orderArea.removeAll();

}

}

//kod i klassen controller
public void läggInNyOrder(String nyttKundId, Order nyOrder){
kund.läggInNyOrder(nyttKundId, nyOrder);

}

//kod i klassen kund:
public void läggInNyOrder(String nyttKundId, Order nyOrder){
ordrar.add(nyOrder); //en arraylist som lagrar orderobjekt som består av arraylists av typen orderrad samt ett id-nummer
koppla.put(nyttKundId, ordrar); //en hashmap som kopplar kundnummer med ordern

}

Tack på förhand!

Obs! Är nybörjare så skriv gärna grundliga förklaringar

Visa signatur

[Asus P5Q-E] [Q6600 G0 @ 3,6 ghz] [Scythe Yasya] [Gigabyte Gtx 460 1gb] [4x2 Gb Kingston HyperX PC8500] [OCZ ModXstream Pro 700 W ] [Crucial M4 128 gb ]
HTPC - AMD Athlon X2 5050e - M4N78-VM - Kingston HyperX 2 GB - Seagate 7200.12 1 TB - Seagate Green SATA III 2TB

Permalänk
Vila i frid

Om getOrderRad() returnerar NUL får du även tebax NUL från addAll(). Ni har ingen debugger tillgänglig för felsökning?

Permalänk

Ser, men framför allt låter, komplicerat /ut. Är detta C kursen?

Permalänk
Medlem

Allt ser krångligt ut om man inte postar det inom code-taggarna
Jag skulle gissa att detta inte är C-kursen då TS skriver att han är nybörjare... fast å andra sidan är det ju OOP, som ingår i C-kursen.

Visa signatur

citera!

Permalänk

Natt-dowser! Tänkte faktiskt ha sista posten på 3 trådar i rad här för att sprida en lite mystisk stämning på morgonkvisten. Grafisktgränsnitt är väl ändå inte B kursen? Här låter det till och med som om han är mästare på filsparade. Minst sen B-kurs med tjuvstart på C.

Permalänk

Det är högskolenivå på den här uppgiften, har själv fått den och sitter med den.

Var definieras order som används på raden som är markerad med kommentaren i koden? Ser ingen definition av den variabeln i koden som är inklistrad.

Visa signatur

RTFM - vacker sak att säga till folk som ställer dumma frågor

Permalänk
Skrivet av jcarlsson:

Det är högskolenivå på den här uppgiften, har själv fått den och sitter med den.

Var definieras order som används på raden som är markerad med kommentaren i koden? Ser ingen definition av den variabeln i koden som är inklistrad.

Precis. Ni måste posta vad "getOrderRad" är och vad "order" är

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

har ändrat i koden nu och får inte längre felmeddelanden, men inget händer när man trycker på vår spara order knapp... postar hur koden ser ut nu (även kod för visa order för en specifik kund):

private void sparaOrderKnapp_actionPerformed(ActionEvent e) {
String orderId = orderNummerFält.getText();
String kundId = kundNrFält.getText();
Order tmpOrder = new Order(orderId);
ArrayList<OrderRad> lista = new ArrayList();
for(int i = 0; i < tmpOrder.getOrderRad().size(); i++){
tmpOrder.läggInNyOrderRad(lista.get(i));

if (kundNrFält.getText() == null) {
responsLabel4.setText("Var god fyll i ordernummer");
} else if (kundId.length() == '0') {
responsLabel4.setText("Var god fyll i kundnummer");
} else if (lista.isEmpty() == true) {
responsLabel4.setText("Var god lägg orderrad först");
} else {

controller.läggInNyOrder(kundId, tmpOrder);
responsLabel4.setText("Order sparad.");
orderArea.removeAll();

}

}

}

private void rensaOrderKnapp_actionPerformed(ActionEvent e) {
orderArea.removeAll();

}

private void orderArea_actionPerformed(ActionEvent e) {
}

/*private void orderNummerFält_actionPerformed(ActionEvent e) {
}*/

private void visaOrderKnapp_actionPerformed(ActionEvent e) {
String id = kundNrFält.getText();
Kund tmpKund = controller.sökKund(id);
if (tmpKund == null) {
responsLabel.setText("Kunden saknas i registret");
} else {

HashMap tmpHashMap = new HashMap();
if(tmpHashMap.containsKey(id)){
responsLabel.setText("order finns");
tmpHashMap.get(id);

visaOrderLista.addItem(tmpHashMap.get(id));

}else{
responsLabel.setText("Kunden har inte lagt några ordrar");
}
}

}

Visa signatur

[Asus P5Q-E] [Q6600 G0 @ 3,6 ghz] [Scythe Yasya] [Gigabyte Gtx 460 1gb] [4x2 Gb Kingston HyperX PC8500] [OCZ ModXstream Pro 700 W ] [Crucial M4 128 gb ]
HTPC - AMD Athlon X2 5050e - M4N78-VM - Kingston HyperX 2 GB - Seagate 7200.12 1 TB - Seagate Green SATA III 2TB

Permalänk
Medlem

helt omöjligt att avgöra, vi måste se klassen Order (tmpOrder), konstruktor eller annan initiering samt hur metoden getOrderRad ser ut, vad har ni fyllt "lista" med? Inget? Det finns väll heller ingen garanti att lista innehåller lika många element som getOrderRad? Det hela ser mycket skumt ut.