Dlaczego ten przycisk obsługi zwróci null na drugim biegu?

głosy
0

Celem tego przycisku Handler jest poszukiwanie binarne drzewo dla lokalizacji do rekordu wewnątrz pliku losowego dostępu. Metoda fillInfoField ma zapełnić GUI ze zwracanych danych. Każda pomoc będzie bardzo mile widziane!

    private class HandlerSSN implements ActionListener {
    public void actionPerformed(ActionEvent event) {
        String ssnReqStr = tfReqSSN.getText();
        String num;
        int ssn;

        BalanceOnDemand.Node currNode = null;
        BalanceOnDemand myTree = new BalanceOnDemand();

        if (ssnReqStr.length() == 0) {
            tfMsg.setText(Lookup by Name (partial match allowed));
            tfReqName.requestFocus();
            return;
        } else {
            try {
                raf.seek(0);
                myTree.root = (BalanceOnDemand.Node) ois.readObject();

                num = ssnReqStr.replaceAll([^0-9], );
                ssn = Integer.parseInt(num);
                currNode = myTree.find(ssn);
                System.out.println(currNode);
                if(currNode != null){
                    raf.seek(currNode.loc - REC_LEN);
                    fillInfoFields(readCurrRec());
                }else{
                    System.out.println(Test);
                    tfMsg.setText(SSN \ + tfReqSSN.getText() + \ was not found);
                    return;
                }

            } catch (IOException | ClassNotFoundException e) {
                System.out.println(currNode.id);
                tfMsg.setText(SSN \ + tfReqSSN.getText()
                        + \ was not found);
            }
        }

    }
}

Oto sposób znaleźć, jeśli chcesz go zobaczyć.

public Node find(int key)
{
Node current;
current = root;

while(current!=null && current.id!=key)
  {
    if(key<current.id){
      current = current.left;
    }else{
      current = current.right;
    }
  }
  return current;

}

  class Node implements Serializable

{

private static final long serialVersionUID = 1L;
public int    id;
public int    loc;
public Node   left;
public Node   right;

    public Node(int i,int i2)
    {
      id    = i;
      loc  = i2;
      left  = null;
      right = null;
    }
  }
Utwórz 02/12/2013 o 00:48
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

Rozwiązałem to na własną rękę. I potrzebny do ponownego wystąpienia każdy ze strumieni wejściowych. Oto kod dodałem na górę obsługi przycisku.

        try
        {
          fis = new FileInputStream("treeObject.dat");
          ois = new ObjectInputStream(fis);
        }
        catch (IOException e)
        {
          e.printStackTrace();
        }
Odpowiedział 02/12/2013 o 02:42
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more