2016-11-28 4 views
-1

Ich erhalte einen Fehler, wenn ich versuche, einen Code zu schreiben, um automatisch eine Registerkarte aus dem Registerkartenbereich auszuwählen, wenn die Bedingung wahr ist, aber ich einen Fehler mit Nullzeigerausnahme erhalte während ich versuche, den Code auszuführen, nachdem ich ihn kompiliert habe !! Das Problem ist in der LoadData(); Methode auf setSelectedTab();Ich bekomme NULLPOINTER-Ausnahme für JTabbed-Fensterindex nach der Ausführung

import java.util.*; 
    import java.awt.*; 
    import javax.swing.*; 
    import java.io.*; 
    import java.awt.event.*; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 
    import java.awt.event.WindowListener; 

public class GUI erweitert JFrame Action implementiert {

private static final long serialVersionUID = 1; 

ArrayList<Ship> shiplist= new ArrayList<Ship>(); 
private int shipcount = 0; 
private int index = 0; 
private Ship shipob; 
private JTextField ShipYear; 
private JTextField ShipName; 
private JTextField CrewSize; 
private JTextField ShipType; 
private JTextField NoOfPass; 
private JTextField NoOfCabins; 
private JTextField PerFull; 
private JTextField CabinRate; 
private JTextField SizeCat; 
private JTextField PerFilled; 
private JTextField LiquidType; 
private JTextField Capacity; 
private ObjectInputStream inStream; 
private ObjectOutputStream outStream; 
private JTabbedPane tab; 
private CruiseShip cruiseShip; 
private DryCargoShip dryShip; 
private LiquidCargoShip liquidShip; 
JLabel message=new JLabel(); 

öffentliche GUI() {

setSize(2000,300); 
setTitle("Ship Data"); 
Container content= getContentPane(); 
content.setBackground(Color.GRAY); 
content.setLayout(new BorderLayout()); 
JMenuBar menu=new JMenuBar(); 
JMenuItem menue= new JMenuItem("Exit"); 
menue.addActionListener(this); 
menu.add(menue); 
setJMenuBar(menu); 
this.addWindowListener(new WindowDestroyer()); 

JPanel panel1= new JPanel(); 
panel1.setBackground(Color.YELLOW); 
panel1.setLayout(new GridLayout(2,2)); 
panel1.add(new JLabel("Ship Name:")); 
ShipName= new JTextField(50); 
panel1.add(ShipName); 
panel1.add(new JLabel("Ship Year:")); 
ShipYear= new JTextField(50); 
panel1.add(ShipYear); 
panel1.add(new JLabel("Crew Size:")); 
CrewSize= new JTextField(50); 
panel1.add(CrewSize); 
panel1.add(new JLabel("Ship Type:")); 
ShipType= new JTextField(50); 
panel1.add(ShipType); 
content.add(panel1, BorderLayout.NORTH); 
JPanel panel2= new JPanel(); 
panel2.setLayout(new BorderLayout()); 
JPanel panel3= new JPanel(); 
panel3.setBackground(Color.CYAN); 
panel3.setLayout(new FlowLayout()); 
JButton Button1= new JButton("Next"); 
Button1.addActionListener(this); 
panel3.add(Button1); 
JButton Button2= new JButton("Previous"); 
Button2.addActionListener(this); 
panel3.add(Button2); 
panel2.add(panel3,BorderLayout.WEST); 
panel2.add(message,BorderLayout.EAST); 
JTabbedPane tab=new JTabbedPane(); 
content.add(panel2, BorderLayout.SOUTH); 
JPanel cs= new JPanel(); 
//JPanel z= new JPanel(); 
cs.setBackground(Color.ORANGE); 
cs.setLayout(new GridLayout(2,2)); 
cs.add(new JLabel("No of Passenger: ")); 
NoOfPass= new JTextField(25); 
cs.add(NoOfPass); 
cs.add(new JLabel("No of Cabins: ")); 
NoOfCabins= new JTextField(25); 
cs.add(NoOfCabins); 
cs.add(new JLabel("Percentage Full: ")); 
PerFull= new JTextField(25); 
cs.add(PerFull); 
cs.add(new JLabel("Cabin Rate: ")); 
CabinRate= new JTextField(25); 
cs.add(CabinRate); 
tab.addTab("Cruise Ship", cs); 
JPanel ds= new JPanel(); 
//JPanel x= new JPanel(); 
ds.setBackground(Color.ORANGE); 
ds.setLayout(new GridLayout(1,2)); 
ds.add(new JLabel("Size Category : ")); 
SizeCat= new JTextField(25); 
ds.add(SizeCat); 
ds.add(new JLabel("Percentage Filled : ")); 
PerFilled= new JTextField(25); 
ds.add(PerFilled); 
tab.addTab("Dry Cargo Ship", ds); 
JPanel ls= new JPanel(); 
//JPanel y= new JPanel(); 
ls.setBackground(Color.ORANGE); 
ls.setLayout(new GridLayout(1,2)); 
ls.add(new JLabel("Liquid Type : ")); 
LiquidType= new JTextField(25); 
ls.add(LiquidType); 
ls.add(new JLabel("Capacity : ")); 
Capacity= new JTextField(25); 
ls.add(Capacity); 
tab.addTab("Liquid Cargo Ship", ls); 
content.add(tab,BorderLayout.CENTER); 

}

public static void main(String[] args) 
{ 
    GUI Gui = new GUI(); 
    Gui.readData(); 
    Gui.loadData(); 
    Gui.index = 0; 
    Gui.met(); 
    //Gui.shipcount= shiplist.size(); 
    Gui.setVisible(true); 

} 

public void actionPerformed(ActionEvent e) 
{ 
    Container container = getContentPane(); 
    String string = e.getActionCommand(); 
    if (string.equals("Next")) 
    { 
     nextShip(); 
    } 
    else if (string.equals("Previous")) 
    { 
     previousShip(); 
    } 
    else if (string.equals("Exit")) 
    { 
     writeData(); 
     System.exit(0); 
    } 
    else 
    { 
     System.out.println("Error"); 
    } 
} 

public void readData() 
{ 
    inStream=null; 
    try 
    { 
    inStream= new ObjectInputStream(new FileInputStream("shipdata.dat")); 
    try { 
     this.shipcount = 0; 
     do { 
      shiplist.add((Ship)inStream.readObject()); 
      shipcount++; 
     } while (true); 
    } 
    catch (EOFException obj1) 
    { 
     System.out.println("Entered EOF"); 
    } 
    catch (ClassNotFoundException obj2) 
    { 
     System.out.println("Class Error: " + obj2.getMessage()); 
    } 
    this.inStream.close(); 
} 
catch (FileNotFoundException obj3) 
    { 
    System.out.println("File Error: " + obj3.getMessage()); 
} 
catch (IOException obj4) 
    { 
    System.out.println("IO Error in read file data: " + obj4.getMessage()); 
} 
} 
public void met() 
{ 

    shipcount= shiplist.size(); 
} 



public void loadData() { 
     shipob = shiplist.get(index); 
     ShipName.setText(shipob.getShipName()); 
     ShipYear.setText(shipob.getYear()); 
     String a=""+shipob.getCrewSize(); 
     CrewSize.setText(a); 
     ShipType.setText(shipob.getShipType()); 
     if (shipob.getShipType().equals("Cruise Ship")) 
     { 
      System.out.println("In Cruise ship"); 
      cruiseShip = (CruiseShip)shipob; 
      String b=""+cruiseShip.getCabinRate(); 
      CabinRate.setText(b); 
      NoOfPass.setText(Integer.toString(cruiseShip.getNoOfPass())); 
      NoOfCabins.setText(Integer.toString(cruiseShip.getNoOfCabins())); 
      PerFull.setText(Double.toString(cruiseShip.getPerFull() * 100.0)); 
      tab.setSelectedIndex(0); // ERROR IN SELECT INDEX - NULL POINTER EXCEPTION 

     } 



else if (shipob.getShipType().equals("Dry Cargo Ship")) 
    { 
     System.out.println("In Dry ship"); 
     dryShip = (DryCargoShip)shipob; 
     SizeCat.setText(dryShip.getSize()); 
     String c=" "+dryShip.getPerFilled()*100.0; 
     PerFilled.setText(c); 
     try{ 
     tab.setSelectedIndex(1);} 
     catch(Exception e){ 
      System.out.println(e); 
     } 
    } 
    else if (shipob.getShipType().equals("Liquid Cargo Ship")) 
    { 
     System.out.println("In LC ship"); 
     liquidShip = (LiquidCargoShip)shipob; 
     LiquidType.setText(liquidShip.getLiqType()); 
     Capacity.setText(Integer.toString(liquidShip.getCapacity())); 
     tab.setSelectedIndex(2); 
    } 
} 




public void nextShip() { 
    if (index == shipcount - 1) { 
     message.setText("Already at last record "); 
    } 
    else { 
     message.setText(""); 
     index++; 
     loadData(); 
    } 
} 

    public void previousShip() { 
     if (index == 0) 
     { 
      message.setText("Already at first record  "); 
     } 
     else 
     { 
      message.setText(""); 
      index--; 
      loadData(); 
     } 
    } 

    public void writeData() 
    { 
     try { 
      outStream = new ObjectOutputStream(new FileOutputStream("shipdata.dat", false)); 
      for (Ship ship : shiplist) 
      { 
       outStream.writeObject(ship); 
      } 
      outStream.flush(); 
      outStream.close(); 
     } 
     catch (IOException obj1) { 
      System.out.println("IO Error in writing the data: " + obj1.getMessage()); 
     } 
    } 
    } 

Antwort

1

Im Konstruktor Sie sind INITIALIZ eine lokale JTabbedPane und nicht die, die in der Klasse deklariert ist und auf die in der Methode loadData zugegriffen wird. Bitte initialisieren die Variable tab in der richtigen Weise, das heißt

this.tab=new JTabbedPane(); 

statt

JTabbedPane tab=new JTabbedPane(); 
+0

Thank you so much !! Danke, dass du das langwierige Programm durchgehst und mir geholfen hast :) –

Verwandte Themen