Help on ObjectInputStream( );

hi everyone,
i have an object with these methods(getTotal(),getItem(),getID() and so on). im tryin to cast all IDs into JComboBox, so that when u clicked on view button all the data ids would be in the JcomboBox. i've tried the following codes but it did not work for me.
FileInputStream fis;
ObjectInputStream ois;
viewCombo = new JComboBox();
try{
      fis = new FileInputStream("data.dat");
       ois = new ObjectInputStream(fis);
       DataList dl = (DataList)ois.readObject();
         ois.close();
         fis.close();
      for (int i=0;i<dl.getTotal();i++){
       DataRecord rec = (DataRecord)dl.getItem(i);
          String idNum = rec.getID();
           viewCombo.addItem(idNum);
    }catch(FileNotFoundException e){
            System.out.println("file not found");}
    catch(ClassNotFoundException e){
          System.out.println("erroe reading file");
      }catch(IOException e) {}

hi everyone,
i have an object with these
methods(getTotal(),getItem(),getID() and so on). im
tryin to cast all IDs into JComboBox, so that when u
clicked on view button all the data ids would be in
the JcomboBox. i've tried the following codes but it
did not work for me.How do you know it did not work? What happens or doesn't happen? That would be useful information for anyone who wants to help you.

Similar Messages

  • Need help with ObjectInputStream

    i'm sending a serialized object over an ObjectInputStream, this object has a display function. my server uses readObject in a while true loop and everytime he gets an object he prints object.display. everytime i send an object the server recieves it but the display function shows the same thing as it showed in the first sent object, what can cause it?
    here is my code:
    while(true)
    SmilyParser s=(SmilyParser)in.readObject();
    System.out.println("something recieved");
    s.display();
    }

    public void Send(SmilyParser SP) throws Exception
            //out.flush();
            //out.reset();
            if(out==null)
                out = new ObjectOutputStream(clientSocket.getOutputStream());
            System.out.println("ready to send SmilyParser");//testing
            out.writeObject(SP);
            System.out.println("SmilyParser sent");//testing
           // out.flush();
            out.reset();
        }

  • ObjectInputStream() returning null and EOFException - need help

    I have been working on this little snippet of code all day and I cannot understand why I get null values when I run a display application. The code is posted below for 3 file. PhoneList.java is for serialization. CreatePhoneList is to populate a saved file with phone numbers and names of contacts. DisplaySavedPhoneList.java is to display the saved names and numbers. I'm not looking for the correct code, put for someone to point me in the right direction on why I'm getting these results so I can find a solution.
    Here is the PhoneList class:
    import java.io.*;
    public class PhoneList implements Serializable
        private String name;
        private String num;
        private String phName;
        private String phNum;
        PhoneList(String phNum, String phName)
            setName(phName);
            setNum(phNum);
        public String getName()
            return phName;
        public String getNum()
            return phNum;
        public void setName(String phName)
            name = phName;
        public void setNum(String phNum)
            num = phNum;
    }Here is the CreatePhoneList class
    import java.io.*;
    import java.util.*;
    public class CreatePhoneList
        public static void main(String[] args) throws IOException
            ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream("PhoneList.txt"));
            PhoneList list;
            String phName;
            String phNum;
            final String QUIT = "QUIT";
            Scanner in = new Scanner(System.in);
            System.out.println("Enter a phone number or " + QUIT + " to quit.");
            phNum = in.next();
            while(!phNum.equals(QUIT))
                System.out.println("Enter the contact name.");
                phName = in.next();
                list = new PhoneList(phNum, phName);
                output.writeObject(list);
                System.out.println("Enter a phone number or " + QUIT + " to quit.");
                phNum = in.next();
            output.close();
    }and this is the DisplaySavedPhoneList class:
    import java.io.*;
    import java.util.*;
    public class DisplaySavedPhoneList
        public static void main(String[] args) throws IOException, ClassNotFoundException
            ObjectInputStream input = new ObjectInputStream(new FileInputStream("PhoneList.txt"));
            PhoneList list;
            final int SHOW = 1;
            int showList;
            int count = 0;
            Scanner in = new Scanner(System.in);
            try
                System.out.print("To display Phone List enter " + SHOW);
                showList = in.nextInt();
                while(showList == SHOW)
                    list = (PhoneList)input.readObject();
                    System.out.println("Name: " + list.getName() + " Phone Number: " + list.getNum());
                    count++;
            catch(EOFException e)
                System.out.println("Oops, something broke!");
                input.close();
    }This is the result from running the DisplaySavedPhoneList application:
    To display Phone List enter 1
    1
    Name: null Phone Number: null
    Name: null Phone Number: null
    Oops, something broke!

    ok, I did that, and its pointing me to the line commented below. I did a practical exercise where the code was almost identical and it worked fine. The only difference are the variables.
    try
                System.out.print("To display Phone List enter " + SHOW);
                showList = in.nextInt();
                while(showList == SHOW)
                    list = (PhoneList)input.readObject(); //this is the line that was identified in the stacktrace
                    System.out.println("Name: " + list.getName() + " Phone Number: " + list.getNum());
                    count++;
            catch(EOFException e)
                System.out.println("Stack Trace");
                e.printStackTrace();
                input.close();
            }here is the total stack trace, in case you were wondering...
    To display Phone List enter 1
    1
    Name: null Phone Number: null
    java.io.EOFException
    Name: null Phone Number: null
    Stack Trace
            at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2554)
            at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1297)
            at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
            at DisplaySavedPhoneList.main(DisplaySavedPhoneList.java:21)I'm still not quite sure what this is telling me though.

  • ObjectInputStream anomilies...please help

    Hi,
    I have been having some trouble with reading from a socket using ObjectInputStream.readObject(). I have two versions of my code, just one line different. In the first version, the first time through the loop I read perfectly, then all times after that I read nothing. In the second version, I also read perfect the first time through the loop, but every subsequent time I don't read the new stuff, it tells me I am reading the same thing that it read the first time. Here is the code and some output:
    ArrayList remoteEvents = new ArrayList();
    while (running) {
            remoteEvents.clear();  //this is commented out in the other version of my code
            System.out.println("about to call readObject()");
            remoteEvents = (ArrayList)ois.readObject();
            System.out.println("received " + remoteEvents + " remote events");
    }Here is some output produced by the above code:
    about to call readObject()
    received [Jeff is great at 0.0, Jeff is great at 0.0] remote events
    about to call readObject()
    received [] remote events
    Now, here is the second version. In this one, I don't clear the ArrayList:
    ArrayList remoteEvents = new ArrayList();
    while (running) {
            //remoteEvents.clear();
            System.out.println("about to call readObject()");
            remoteEvents = (ArrayList)ois.readObject();
            System.out.println("received " + remoteEvents + " remote events");
    }Here is some output produced by this code:
    about to call readObject()
    received [Jeff is great at 0.0, Jeff is great at 0.0] remote events
    about to call readObject()
    received [Jeff is great at 0.0, Jeff is great at 0.0] remote events
    about to call readObject()
    received [Jeff is great at 0.0, Jeff is great at 0.0] remote events
    See, each subsequent time through the loop, what is being sent to this input stream changes. The first time, the messages were "[Jeff is great at 0.0, Jeff is great at 0.0]". The second time, they were
    "[Jeff is great at 0.011, Jeff is great at 0.011]". The third time they were "[Jeff is great at 0.022, Jeff is great at 0.022]" etc. Print statements at the sender verify that these different messages are being sent.
    So, it seems that if I do NOT clear the ArrayList then I always see the same messages in there, while if I clear it then I only see messages the first time.
    Anyone got any hints?
    Thanks,
    Jeff

    you have the similiar problems with this 1...
    http://forum.java.sun.com/thread.jsp?forum=31&thread=513011

  • I am really sorry but I am still stuck. Please help.

    Please can someone help me with the following code. I have a number of questions. So far all buttons that I have coded actions for work fine. When The program saves it does it correctly as I have seen the text file. However I have some problems.
    1) How can I declare the arrays in another way without setting them to "" when the program starts. I need the program to start and show the previous saved arrays instead. I dont know if my method used for retrieving data from the file is correct either?.
    2) When retrieving the values from a file that has example (all are string values). ADAM SANDLER 111 222 333 MICKY MOUSE 222 444 666
    Where I want them to be in the follwing arrays as an example.
    String name[1] = ADAM
    String surname[1] = SANDLER
    String home[1] = 111
    String work[1] = 222
    String cell[1] = 333
    String name[2] = MICKY
    String surname[2] = MOUSE
    String home[2] = 222
    String work[2] = 444
    String cell[2] = 666
    Here is my code.
         Filename:     ContactsListInterface.java
         Date:           16 March 2008
         Programmer:     Yucca Nel
         Purpose:     Provides a GUI for entering names and contact numbers into a telephone directory.
                        Also allows options for searching for a specific name and deleting of data from the record
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.text.*;
    import java.io.*;
    import java.util.*;
    import java.text.*;
    public class ContactsListInterface extends JFrame implements ActionListener
    { //start of class
         // Declare outputstream and inputStream
         DataOutputStream output;
         DataInputStream input;
         String filename = "phonebook";
         // construct fields, buttons, labels and text boxes
         JTextPane displayPane = new JTextPane();
         JLabel listOfContacts = new JLabel("List Of Contacts");               // creates a label for the scrollpane
         JButton createButton = new JButton("Create");
         JButton searchButton = new JButton("Search");
         JButton modifyButton = new JButton("Modify");
         JButton deleteButton = new JButton("Delete");
         // declare data arrays for name, surname, work number, home number and cell number
         private String name[] = {""};
         private String surname[] = {""};
         private String home[] = {""};
         private String work[] = {""};
         private String cell[] = {""};
         // create an instance of the ContactsListInterface
         public ContactsListInterface()
         { // start of cli()
              super("Phonebook Interface");
         } // end of cli()
         public JMenuBar createMenuBar()
         { // start of the createMenuBar()
              // construct and populate a menu bar
              JMenuBar mnuBar = new JMenuBar();                    // creates a menu bar
              setJMenuBar(mnuBar);
              JMenu mnuFile = new JMenu("File",true);               // creates a file menu in the menu bar which is visible
                   mnuFile.setMnemonic(KeyEvent.VK_F);
                   mnuFile.setDisplayedMnemonicIndex(0);
                   mnuFile.setToolTipText("File Options");
                   mnuBar.add(mnuFile);
              JMenuItem mnuFileExit = new JMenuItem("Exit");     // creates an exit option in the file menu
                   mnuFileExit.setMnemonic(KeyEvent.VK_X);
                   mnuFileExit.setDisplayedMnemonicIndex(1);
                   mnuFileExit.setToolTipText("Close Application");
                   mnuFile.add(mnuFileExit);
                   mnuFileExit.setActionCommand("Exit");
                   mnuFileExit.addActionListener(this);
              JMenu mnuEdit = new JMenu("Edit",true);               // creates a menu for editing options
                   mnuEdit.setMnemonic(KeyEvent.VK_E);
                   mnuEdit.setDisplayedMnemonicIndex(0);
                   mnuEdit.setToolTipText("Edit Options");
                   mnuBar.add(mnuEdit);
              JMenu mnuEditSort = new JMenu("Sort",true);          // creates an option for sorting entries
                   mnuEditSort.setMnemonic(KeyEvent.VK_S);
                   mnuEditSort.setDisplayedMnemonicIndex(0);
                   mnuEdit.add(mnuEditSort);
              JMenuItem mnuEditSortByName = new JMenuItem("Sort By Name");          // to sort entries by name
                   mnuEditSortByName.setMnemonic(KeyEvent.VK_N);
                   mnuEditSortByName.setDisplayedMnemonicIndex(8);
                   mnuEditSortByName.setToolTipText("Sort entries by first name");
                   mnuEditSortByName.setActionCommand("Name");
                   mnuEditSortByName.addActionListener(this);
                   mnuEditSort.add(mnuEditSortByName);
              JMenuItem mnuEditSortBySurname = new JMenuItem("Sort By Surname");     // to sort entries by surname
                   mnuEditSortBySurname.setMnemonic(KeyEvent.VK_R);
                   mnuEditSortBySurname.setDisplayedMnemonicIndex(10);
                   mnuEditSortBySurname.setToolTipText("Sort entries by surname");
                   mnuEditSortBySurname.setActionCommand("Surname");
                   mnuEditSortBySurname.addActionListener(this);
                   mnuEditSort.add(mnuEditSortBySurname);
              JMenu mnuHelp = new JMenu("Help",true);                    // creates a menu for help options
                   mnuHelp.setMnemonic(KeyEvent.VK_H);
                   mnuHelp.setDisplayedMnemonicIndex(0);
                   mnuHelp.setToolTipText("Help options");
                   mnuBar.add(mnuHelp);
              JMenuItem mnuHelpHelp = new JMenuItem("Help");          // creates a help option for help topic
                   mnuHelpHelp.setMnemonic(KeyEvent.VK_P);
                   mnuHelpHelp.setDisplayedMnemonicIndex(3);
                   mnuHelpHelp.setToolTipText("Help Topic");
                   mnuHelpHelp.setActionCommand("Help");
                   mnuHelpHelp.addActionListener(this);
                   mnuHelp.add(mnuHelpHelp);
              JMenuItem mnuHelpAbout = new JMenuItem("About");     // creates a about option for info about api
                   mnuHelpAbout.setMnemonic(KeyEvent.VK_T);
                   mnuHelpAbout.setDisplayedMnemonicIndex(4);
                   mnuHelpAbout.setToolTipText("About this program");
                   mnuHelpAbout.setActionCommand("About");
                   mnuHelpAbout.addActionListener(this);
                   mnuHelp.add(mnuHelpAbout);
              return mnuBar;
         } // end of the createMenuBar()
         // create the content pane
         public Container createContentPane()
         { // start of createContentPane()
              // try blocks for the input and output
              try
                   output = new DataOutputStream(new FileOutputStream(filename));
              catch(IOException io)
                   JOptionPane.showMessageDialog(null,"This program could not create a storage location. Please check the disk drive and the tun the program again.","Error",JOptionPane.ERROR_MESSAGE);
                   System.exit(1);
              //construct and populate panels and content pane
              JPanel labelPanel = new JPanel(); // panel is only used to put the label for the textpane in
                   labelPanel.setLayout(new FlowLayout());
                   labelPanel.add(listOfContacts);
              JPanel displayPanel = new JPanel();// panel is used to display all the contacts and thier numbers
                   setTabsAndStyles(displayPane);
                   displayPane = addTextToTextPane();
                   displayPane.setEditable(false);
              JScrollPane scrollPane = new JScrollPane(displayPane);
                   scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); // pane is scrollable vertically
                   scrollPane.setWheelScrollingEnabled(true);// pane is scrollable by use of the mouse wheel
                   scrollPane.setPreferredSize(new Dimension(400,320));
              displayPanel.add(scrollPane);
              JPanel workPanel = new JPanel();// panel is used to enter, edit and delete data
                   workPanel.setLayout(new FlowLayout());
                   workPanel.add(createButton);
                        createButton.setToolTipText("Create a new entry");
                        createButton.addActionListener(this);
                   workPanel.add(searchButton);
                        searchButton.setToolTipText("Search for an entry by name number or surname");
                        searchButton.addActionListener(this);
                   workPanel.add(modifyButton);
                        modifyButton.setToolTipText("Modify an existing entry");
                        modifyButton.addActionListener(this);
                   workPanel.add(deleteButton);
                        deleteButton.setToolTipText("Delete an existing entry");
                        deleteButton.addActionListener(this);
              labelPanel.setBackground(Color.red);
              displayPanel.setBackground(Color.red);
              workPanel.setBackground(Color.red);
              // create container and set attributes
              Container c = getContentPane();
                   c.setLayout(new BorderLayout(30,30));
                   c.add(labelPanel,BorderLayout.NORTH);
                   c.add(displayPanel,BorderLayout.CENTER);
                   c.add(workPanel,BorderLayout.SOUTH);
                   c.setBackground(Color.red);
              // add a listener for the window closing and save
              addWindowListener(
                   new WindowAdapter()
                        public void windowClosing(WindowEvent e)
                             int answer = JOptionPane.showConfirmDialog(null,"Are you sure you would like to save all changes and exit?","File submission",JOptionPane.YES_NO_OPTION);
                             if(answer == JOptionPane.YES_OPTION)
                                  save();
                                  System.exit(0);
              return c;
         } // end of createContentPane()
         protected void setTabsAndStyles(JTextPane displayPane)
         { // Start of setTabsAndStyles()
              // set Font style
              Style fontStyle = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);
              Style regular = displayPane.addStyle("regular", fontStyle);
              StyleConstants.setFontFamily(fontStyle, "SansSerif");
              Style s = displayPane.addStyle("bold", regular);
              StyleConstants.setBold(s,true);
         } // End of setTabsAndStyles()
         public JTextPane addTextToTextPane()
         { // start of addTextToTextPane()
              try
                   input = new DataInputStream(new FileInputStream(filename));
                   for(int i=0; i<name.length;i++)
                        name[i] = input.readUTF();
                        surname[i] = input.readUTF();
                        home[i] = input.readUTF();
                        work[i] = input.readUTF();
                        cell[i] = input.readUTF();
              catch(IOException io)
              Document doc = displayPane.getDocument();
              try
              { // start of tryblock
                   // clear previous text
                   doc.remove(0,doc.getLength());
                   // insert titles of columns
                   doc.insertString(0,"NAME\tSURNAME\tHOME NO\tWORK NO\tCELL NO\n",displayPane.getStyle("bold"));
                   // insert data
                   for(int i=0; i<name.length; i++)
                        doc.insertString(doc.getLength(), name[i] +"\t",displayPane.getStyle("regular"));
                        doc.insertString(doc.getLength(), surname[i] +"\t",displayPane.getStyle("regular"));
                        doc.insertString(doc.getLength(), home[i]+"\t",displayPane.getStyle("regular"));
                        doc.insertString(doc.getLength(), work[i]+"\t",displayPane.getStyle("regular"));
                        doc.insertString(doc.getLength(), cell[i]+"\t",displayPane.getStyle("regular"));
              } // end of try block
              catch(BadLocationException ble)
              { // start of ble exception handler
                   System.err.println("Could not insert text.");
              } // end of ble exception handler
              return displayPane;
         } // end of addTextToTextPane()
         // code to process user clicks
         public void actionPerformed(ActionEvent e)
         { // start of actionPerformed()
              String arg = e.getActionCommand();
              // user clicks exit option
              if(arg.equals("Exit"))
                   int answer = JOptionPane.showConfirmDialog(null,"Exiting will save all changes to file. \nAre you sure you would like to save and exit now?","File submission",JOptionPane.YES_NO_OPTION);
                   if(answer == JOptionPane.YES_OPTION)
                        save();
                        System.exit(1);
              // user clicks help option
              if(arg.equals("Help"))
                   JOptionPane.showMessageDialog(null, "Welcome to the phone book application. To add a new entry press the \"Create\" button.\n To search for an entry press the \"Search\" button.\n To modify an existing entry press the \"Modify\" button. \n To delete an entry press the \"Delete\" button.","Help Topic",JOptionPane.INFORMATION_MESSAGE);
              // user clicks about option
              if(arg.equals("About"))
                   JOptionPane.showMessageDialog(null,"Phonebook v 1.01 created by Yucca Nel.\nNo copyright exists.\nThis program is freeware and should not be sold.\nEnjoy :-)","About phonebook",JOptionPane.INFORMATION_MESSAGE);
              // user clicks create button
              if(arg.equals("Create"))
                   createNew();
              // user clicks search button
              if(arg.equals("Search"))
                   searchForName(arg, name);                    // Only possible to search by name as all contacts Must have a name
              if(arg.equals("Modify"))
                   modifyContact(arg,name);
                   save();
              // user clicks the sort by name option
              if(arg.equals("Name"))
                   sort(name);
              if(arg.equals("Surname"))
                   sort(surname);
         } // end of actionPerformed()
         // Method to ceate a new entry
         public void createNew()
         { // start of createNew()
              int newHome, newWork, newCell = 0;
              String newContactName = JOptionPane.showInputDialog(null,"Please enter the new contacts first name or press cancel to exit.");
              if(newContactName == null)     finish();                         // if user clicks cancel
              if(newContactName.length() <=0)
                   JOptionPane.showMessageDialog(null,"You did not enter a valid name.\nPlease make sure you enter data correctly.","Error",JOptionPane.ERROR_MESSAGE);
                   createNew();                                                  // To return to the create method
              String newContactSurname = JOptionPane.showInputDialog(null,"Please enter the new contacts surname or press cancel to exit.");
              if(newContactSurname == null)     finish();                    // if user clicks cancel
              if(newContactSurname.equals(""))
                   int answer = JOptionPane.showConfirmDialog(null,"You did not enter a surname.\nAre you sure you wish to leave the surname empty?","No data entered",JOptionPane.YES_NO_OPTION);   // Asks if data was valid
                   if(answer == JOptionPane.NO_OPTION)
                        newContactSurname = JOptionPane.showInputDialog(null,"Please enter the new contacts surname.");
              String newContactWorkNum = JOptionPane.showInputDialog(null,"Please enter the new contacts work number or press cancel to exit.");
              if(newContactWorkNum == null)   finish();                    // if user clicks cancel
              String newContactHomeNum = JOptionPane.showInputDialog(null,"Please enter the new contacts home number or press cancel to exit.");
              if(newContactHomeNum == null)     finish();                    // if user clicks cancel
              String newContactCellNum = JOptionPane.showInputDialog(null,"Please enter the new contacts cell number or press cancel to exit.");
              if(newContactCellNum == null)     finish();                    // if user clicks cancel
              // enlarge the arrays so they can accept data
              name = enlargeArray(name);
              surname = enlargeArray(surname);
              work = enlargeArray(work);
              home = enlargeArray(home);
              cell = enlargeArray(cell);
              // add the new data into the arrays
              name[name.length-1] = newContactName;
              surname[surname.length-1] = newContactSurname;
              home[home.length-1] = newContactHomeNum;
              work[work.length-1] = newContactWorkNum;
              cell[cell.length-1] = newContactCellNum;
              // sort the names so they appear in alphebetical order
              sort(name);
         } // end of createNew()
         // The enlarge array method
         //method to enlarge an array by 1
         public String[] enlargeArray(String[] currentArray)
              String[] newArray = new String[currentArray.length + 1];
              for (int i = 0; i < currentArray.length; i++)
              newArray[i] = currentArray;
              return newArray;
         }// End of enlargeArray()
         // The Sort Method
         public void sort(String tempArray[])
         { // start of sort()
              // for loop
              for(int pass = 1; pass < tempArray.length; pass++)
                   for(int element = 0; element < tempArray.length -1; element++)
                   if(tempArray[element].compareTo(tempArray[element+1])>0)
                        swap(name, element, element+1);
                        swap(surname, element, element+1);
                        swap(home, element, element+1);
                        swap(work, element, element+1);
                        swap(cell, element, element+1);
              addTextToTextPane();
         } // end of sort()
         // The swap method
         public void swap(String swapArray[], int first, int second)
         { // start of swap()
              String hold;
              hold = swapArray[first];
              swapArray[first] = swapArray[second];
              swapArray[second] = hold;
         } // end of swap()
         // method to search for a name
         public void searchForName(String searchField, String searchArray[])
         { // start of searchForName()
              try
                   Document doc = displayPane.getDocument();                         // assign text to an object
                   doc.remove(0,doc.getLength());                                        // clear the screen
                   doc.insertString(0,"NAME\tSURNAME\tHOME NO\tWORK NO\tCELL NO\n",displayPane.getStyle("bold"));
                   String searchValue = JOptionPane.showInputDialog(null,"Please enter the 1st name of the person you would like to see phone numbers for or press cancel to exit.");
                   boolean found = false;
                   if(searchValue == null) finish();                                   // if user clicks cancel
                   //search the array
                   for(int i=0; i < name.length; i++)
                        if(searchValue.compareTo(searchArray[i])==0)
                             doc.insertString(doc.getLength(), name[i] +"\t",displayPane.getStyle("regular"));
                             doc.insertString(doc.getLength(), surname[i] +"\t",displayPane.getStyle("regular"));
                             doc.insertString(doc.getLength(), home[i]+"\t",displayPane.getStyle("regular"));
                             doc.insertString(doc.getLength(), work[i]+"\t",displayPane.getStyle("regular"));
                             doc.insertString(doc.getLength(), cell[i]+"\t",displayPane.getStyle("regular"));
                             found = true;
                   if(found == false)
                        JOptionPane.showMessageDialog(null,"No contact with that name found.","No result found",JOptionPane.INFORMATION_MESSAGE);
                        sort(name);
              catch(BadLocationException ble)
                   System.err.println("Could not insert text.");
         } // end of searchForName()
         // Method to modify contact
         public void modifyContact(String searchField, String searchArray[])
         { // start of modifyContact()
              try
                   Document doc = displayPane.getDocument();                         // assign text to an object
                   doc.remove(0,doc.getLength());                                        // clear the screen
                   doc.insertString(0,"NAME\tSURNAME\tHOME NO\tWORK NO\tCELL NO\n",displayPane.getStyle("bold"));
                   String modifyValue = JOptionPane.showInputDialog(null,"Please enter the 1st name of the person you would like to change details for. Or press cancel to exit");
                   boolean found = false;
                   if(modifyValue == null)      finish();                              // if user clicks cancel
                   //search the array
                   for(int i=0; i < name.length; i++)
                        if(modifyValue.compareTo(searchArray[i])==0)
                             // To change the name
                             String oldName = name[i];
                             String newName = JOptionPane.showInputDialog(null,"Please enter a new name if you would like to change the name for "+name[i]+". Or press cancel to exit");
                             if(newName == null)
                                  name[i] = oldName;                                        // if user clicks cancel keep old entry
                                  finish();
                             if(newName.equals(""))                                        // if no data entered then name will stay same
                                  JOptionPane.showMessageDialog(null,"You did not enter a name in the name field.\nOld name will be kept.","Information Message",JOptionPane.INFORMATION_MESSAGE);
                                  name[i] = oldName;
                                  addTextToTextPane();
                             else
                                  name[i] = newName;                                        // new name is saved into array
                                  addTextToTextPane();
                             //To change the surname
                             String oldSurname = surname[i];
                             String newSurname = JOptionPane.showInputDialog(null,"Please enter a new surname if you would like to change the surname for "+name[i]+". Or press cancel to exit");
                             if(newSurname == null)
                                  surname[i] = oldSurname;                              // if user clicks cancel keep old entry
                                  finish();
                             if((oldSurname.length()>0) && newSurname.length()<=0)          // if surname existed but no new surname was entered
                                  int answer = JOptionPane.showConfirmDialog(null,"You are about to remove the surname for "+name[i]+".\nAre you sure you would like to remove the surname for this contact?","Please confirm the following",JOptionPane.YES_NO_OPTION);
                                  if(answer == JOptionPane.YES_OPTION)               // user wishes to remove old surname and leave no surname in place
                                       surname[i] = newSurname;                         // new surname is saved into the array
                                  else                                                       // user does not wish to remove surname
                                       surname[i] = oldSurname;                         // keep the old surname
                             else                                                            // just replace the surname with new one as everything seems fine
                                  surname[i] = newSurname;
                             //To change the work number of contact
                             String oldWork = work[i];
                             String newWork = JOptionPane.showInputDialog(null,"Please enter a new work number if you would like to change the work number for "+name[i]+". Or press cancel to exit");
                             if(newWork == null)
                                  work[i] = oldWork;                                        // user clicks cancel keep old entry
                                  finish();
                             if((oldWork.length()>0) && newWork.length()<=0)          // if number existed but no new number was entered
                                  int answer = JOptionPane.showConfirmDialog(null,"You are about to remove the work number for "+name[i]+".\nAre you sure you would like to remove the work number for this contact?","Please confirm the following",JOptionPane.YES_NO_OPTION);
                                  if(answer == JOptionPane.YES_OPTION)               // user wishes to remove old number and leave no number in place
                                       work[i] = newWork;                                   // new number is saved into the array
                                  else                                                       // user does not wish to remove number
                                       work[i] = oldWork;                                   // keep the old number
                             else                                                            // just replace the number with new one as everything seems fine
                                  work[i] = newWork;
                             //To change the work number of contact
                             String oldHome = home[i];
                             String newHome = JOptionPane.showInputDialog(null,"Please enter a new home number if you would like to change the home number for "+name[i]+". Or press cancel to exit");
                             if(newHome == null)
                                  home[i] = oldHome;                                        // if user clicks cancel keep old value
                                  finish();
                             if((oldHome.length()>0) && newHome.length()<=0)          // if number existed but no new number was entered
                                  int answer = JOptionPane.showConfirmDialog(null,"You are about to remove the home number for "+name[i]+".\nAre you sure you would like to remove the home number for this contact?","Please confirm the following",JOptionPane.YES_NO_OPTION);
                                  if(answer == JOptionPane.YES_OPTION)               // user wishes to remove old number and leave no number in place
                                       home[i] = newHome;                                   // new number is saved into the array
                                  else                                                       // user does not wish to remove number
                                       home[i] = oldHome;                                   // keep the old number
                             else                                                            // just replace the number with new one as everything seems fine
                                  home[i] = newHome;
                             //To change the cell number
                             String oldCell = cell[i];
                             String newCell = JOptionPane.showInputDialog(null,"Please enter a new cell number if you would like to change the cell number for "+name[i]+". Or press cancel to exit");
                             if(newCell == null)
                                  cell[i] = oldCell;                                        // if user clicks cancel keep old value
                                  finish();
                             if((oldCell.length()>0) && newCell.length()<=0)          // if number existed but no new number was entered
                                  int answer = JOptionPane.showConfirmDialog(null,"You are about to remove the Cell number for "+name[i]+".\nAre you sure you would like to remove the cell number for this contact?","Please confirm the following",JOptionPane.YES_NO_OPTION);
                                  if(answer == JOptionPane.YES_OPTION)               // user wishes to remove old number and leave no number in place
                                       cell[i] = newCell;                                   // new number is saved into the array
                                  else                                                       // user does not wish to remove number
                                       cell[i] = oldCell;                                   // keep the old number
                             else                                                            // just replace the number with new one as everything seems fine
                                  cell[i] = newCell;
                             found = true;
                        addTextToTextPane();
                   if(found == false)
                        JOptionPane.showMessageDialog(null,"No contact with that name found.","No result found",JOptionPane.INFORMATION_MESSAGE);
                        sort(name);
                        addTextToTextPane();
              catch(BadLocationException ble)
                   System.err.println("Could not insert text.");
         } // end of searchForName()
         // finish method for cancel button
         public void finish()
              JOptionPane.showMessageDialog(null,"This program will now close and automatically save all data entered. You may restart the program to modify any changes.","Information Message",JOptionPane.INFORMATION_MESSAGE);
              System.exit(0);
         // method to save data to file
         public void save()
              try
                   for(int i=0; i < name.length; i++)
                        output.writeUTF(name[i]);
                        output.writeUTF(surname[i]);
                        output.writeUTF(work[i]);
                        output.writeUTF(home[i]);
                        output.writeUTF(cell[i]);
                   JOptionPane.showMessageDialog(null,"Data succesfully saved to file.","Information message",JOptionPane.INFORMATION_MESSAGE);
              catch(IOException io)
                   System.exit(1);
         public static void main(String[] args)
         { // start of main()
              // Set look and feel of interface
              try
              { // start of try block
                   UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
              } // end of try block
              catch(Exception e)
              { // start of catch block
                   JOptionPane.showMessageDialog(null,"There was an error in setting the look and feel of this application","Error",JOptionPane.INFORMATION_MESSAGE);
              } // end of catch block
              ContactsListInterface cli = new ContactsListInterface();
              cli.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
              cli.setJMenuBar(cli.createMenuBar());
              cli.setContentPane(cli.createContentPane());
              cli.setSize(520,500);
              cli.setVisible(true);
              cli.setResizable(false);
         } // end of main()
    } //end of classBefore thinking I am lazy I dont want you to correct my code. Just give me a few pointers on how to get my arrays back from the file and how to set my strings to  a non null value that wont show when my program starts.
    Edited by: Yucca on Mar 24, 2008 7:24 PM                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              

    Yucca wrote:
    It's pretty easy to write objects to file, but it depends on what you want to do with that file. Do you want it to be a human-readable text file? Is it only to be used by your program? The file is to be used by my program to save to and to read from. But I understand now that saving each entry as a string and not writing it to an array may be easier. Do I use the buffered reader instead of InputStreamReader? Oh sorry I forgot to mention that the file I save to will later be used when I convert my application to a database type/SQL tyype aplication.
    Edited by: Yucca on Mar 24, 2008 8:06 PMIt sounds to me like object serialization would be the easiest for what you want to do. Read through this:
    http://java.sun.com/developer/technicalArticles/Programming/serialization/
    And these apis:
    http://java.sun.com/j2se/1.5.0/docs/api/java/io/ObjectOutputStream.html
    http://java.sun.com/j2se/1.5.0/docs/api/java/io/ObjectInputStream.html

  • Help! Saving an image to stream and recreating it on client over network

    Hi,
    I have an application that uses JDK 1.1.8. I am trying to capture the UI screens of this application over network to a client (another Java app running on a PC). The client uses JDK 1.3.0. As AWT image is not serializable, I got code that converts UI screens to int[] and persist to client socket as objectoutputstream.writeObject and read the data on client side using ObjectInputStream.readObject() api. Then I am converting the int[] to an Image. Then saving the image as JPEG file using JPEG encoder codec of JDK 1.3.0.
    I found the image in black and white even though the UI screens are in color. I have the code below. I am sure JPEG encoder part is not doing that. I am missing something when recreating an image. Could be colormodel or the way I create an image on the client side. I am testing this code on a Win XP box with both server and client running on the same machine. In real scenario, the UI runs on an embedded system with pSOS with pretty limited flash space. I am giving below my code.
    I appreciate any help or pointers.
    Thanks
    Puri
         public static String getImageDataHeader(Image img, String sImageName)
             final String HEADER = "{0} {1}x{2} {3}";
             String params[] = {sImageName,
                                String.valueOf(img.getWidth(null)),
                                String.valueOf(img.getHeight(null)),
                                System.getProperty("os.name")
             return MessageFormat.format(HEADER, params);
         public static int[] convertImageToIntArray(Image img)
             if (img == null)
                 return null;
            int imgResult[] = null;
            try
                int nImgWidth = img.getWidth(null);
                int nImgHeight = img.getHeight(null);
                if (nImgWidth < 0 || nImgHeight < 0)
                    Trace.traceError("Image is not ready");
                    return null;
                Trace.traceInfo("Image size: " + nImgWidth + "x" + nImgHeight);
                imgResult = new int[nImgWidth*nImgHeight];
                PixelGrabber grabber = new PixelGrabber(img, 0, 0, nImgWidth, nImgHeight, imgResult, 0, nImgWidth);
                grabber.grabPixels();
                ColorModel model = grabber.getColorModel();
                if (null != model)
                    Trace.traceInfo("Color model is " + model);
                    int nRMask, nGMask, nBMask, nAMask;
                    nRMask = model.getRed(0xFFFFFFFF);
                    nGMask = model.getRed(0xFFFFFFFF);
                    nBMask = model.getRed(0xFFFFFFFF);
                    nAMask = model.getRed(0xFFFFFFFF);
                    Trace.traceInfo("The Red mask: " + Integer.toHexString(nRMask) + ", Green mask: " +
                                    Integer.toHexString(nGMask) + ", Blue mask: " +
                                    Integer.toHexString(nBMask) + ", Alpha mask: " +
                                    Integer.toHexString(nAMask));
                if ((grabber.getStatus() & ImageObserver.ABORT) != 0)
                    Trace.traceError("Unable to grab pixels from the image");
                    imgResult = null;
            catch(Throwable error)
                error.printStackTrace();
            return imgResult;
         public static Image convertIntArrayToImage(Component comp, int imgData[], int nWidth, int nHeight)
             if (imgData == null || imgData.length <= 0 || nWidth <= 0 || nHeight <= 0)
                 return null;
            //ColorModel cm = new DirectColorModel(32, 0xFF0000, 0xFF00, 0xFF, 0xFF000000);
            ColorModel cm = ColorModel.getRGBdefault();
            MemoryImageSource imgSource = new MemoryImageSource(nWidth, nHeight, cm, imgData, 0, nWidth);
            //MemoryImageSource imgSource = new MemoryImageSource(nWidth, nHeight, imgData, 0, nWidth);
            Image imgDummy = Toolkit.getDefaultToolkit().createImage(imgSource);
            Image imgResult = comp.createImage(nWidth, nHeight);
            Graphics gc = imgResult.getGraphics();
            if (null != gc)
                gc.drawImage(imgDummy, 0, 0, nWidth, nHeight, null);       
                gc.dispose();
                gc = null;       
             return imgResult;
         public static boolean saveImageToStream(OutputStream out, Image img, String sImageName)
             boolean bResult = true;
             try
                 ObjectOutputStream objOut = new ObjectOutputStream(out);
                int imageData[] = convertImageToIntArray(img);
                if (null != imageData)
                    // Now that our image is ready, write it to server
                    String sHeader = getImageDataHeader(img, sImageName);
                    objOut.writeObject(sHeader);
                    objOut.writeObject(imageData);
                    imageData = null;
                 else
                     bResult = false;
                objOut.flush();                
             catch(IOException error)
                 error.printStackTrace();
                 bResult = false;
             return bResult;
         public static Image readImageFromStream(InputStream in, Component comp, StringBuffer sbImageName)
             Image imgResult = null;
             try
                 ObjectInputStream objIn = new ObjectInputStream(in);
                 Object objData;
                 objData = objIn.readObject();
                 String sImageName, sSource;
                 int nWidth, nHeight;
                 if (objData instanceof String)
                     String sData = (String) objData;
                     int nIndex = sData.indexOf(' ');
                     sImageName = sData.substring(0, nIndex);
                     sData = sData.substring(nIndex+1);
                     nIndex = sData.indexOf('x');
                     nWidth = Math.atoi(sData.substring(0, nIndex));
                     sData = sData.substring(nIndex+1);
                     nIndex = sData.indexOf(' ');
                     nHeight = Math.atoi(sData.substring(0, nIndex));
                     sSource = sData.substring(nIndex+1);
                     Trace.traceInfo("Name: " + sImageName + ", Width: " + nWidth + ", Height: " + nHeight + ", Source: " + sSource);
                     objData = objIn.readObject();
                     if (objData instanceof int[])
                         int imgData[] = (int[]) objData;
                         imgResult = convertIntArrayToImage(comp, imgData, nWidth, nHeight);
                         sbImageName.setLength(0);
                         sbImageName.append(sImageName);
            catch(Exception error)
                error.printStackTrace();
             return imgResult;
         }   

    While testing more, I found that the client side is generating color UI screens if I use JDK 1.3 JVM for running the server (i.e the side that generates the img) without changing single line of code. But if I use JDK 1.1.8 JVM for the server, the client side is generating black and white versions (aka gray toned) of UI screens. So I added code to save int array that I got from PixelGrabber to a text file with 8 ints for each line in hex format. Generated these files on server side with JVM 1.1.8 and JVM 1.3. What I found is that the 1.1.8 pixel grabber is setting R,G,B components to same value where as 1.3 version is setting them to different values thus resulting in colored UI screens. I don't know why.

  • Help, experiencing minor bugs in program

    this is supposed to use rectangles and you should be able to load and save and they have colors and do a few more things with them, the loading is where it doesn't work.
    *-------------------------------------------------------------- 80 columns ---|
    * This is the main class for the application. It is built along the same
    * lines as the Editor class of project 1. It has a constructor, two instance
    * methods, and a static main()  that kicks the whole thing off.
    * The two instance methods are a menu creation method, and a menuItems
    * initialisation method.  The constructor instantiates the window
    * and sets up its internals by creating and installing the drawing canvas,
    * toolbar, and menus. All of the code works correctly as is and should
    * require no changes.
    * @version      1.1 15/04/01
    * @author       Julie Zelenski
    * @author       Restructured by Ian A. Mason
    * @see       javax.swing.JFrame
    * @see       javax.swing.JMenuBar
    * @see       javax.swing.JMenuItem
    * @see       javax.swing.JMenu
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    public class JavaDraw extends JFrame {
        final Toolbar toolbar = new Toolbar();
        final DrawingCanvas canvas = new DrawingCanvas(toolbar, 350, 350);
        final int menuMask = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
        final JMenuBar mb = new JMenuBar();
        final String[]
             fileMenuItems = {"Clear all", "Load file", "Save to file", "Quit"};
        final int[] fileKeyCodes = {KeyEvent.VK_N, KeyEvent.VK_O, KeyEvent.VK_S, KeyEvent.VK_Q};
        final ActionListener[] fileActionListeners = {
         new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                  canvas.clearAll();}},
         new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                  canvas.loadFile();}},
         new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                  canvas.saveToFile();}},
         new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                  System.exit(0);}}
        final String[] editMenuItems = {"Cut", "Copy", "Paste", "Delete"};
        final int[] editKeyCodes = {KeyEvent.VK_X, KeyEvent.VK_C, KeyEvent.VK_V, KeyEvent.VK_BACK_SPACE};
        final int[] editMenuMasks = {menuMask, menuMask, menuMask, 0};
        final ActionListener[] editActionListeners = {
         new ActionListener() {
              public void actionPerformed(ActionEvent e) { canvas.cut();}},
         new ActionListener() {
              public void actionPerformed(ActionEvent e) { canvas.copy();}},
         new ActionListener() {
              public void actionPerformed(ActionEvent e) { canvas.paste();}},
         new ActionListener() {
              public void actionPerformed(ActionEvent e) { canvas.delete();}}
        final String[] layeringMenuItems = {"Bring to front", "Send to back"};
        final int[]    layeringKeyCodes = {KeyEvent.VK_F, KeyEvent.VK_B};
        final ActionListener[] layeringActionListeners = {
         new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                  canvas.bringToFront();}},
         new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                  canvas.sendToBack();}}
        private JavaDraw(){
         super("JavaDraw!");
         toolbar.setCanvas(canvas);
         getContentPane().add(toolbar, BorderLayout.SOUTH);
         getContentPane().add(canvas, BorderLayout.CENTER);
         createMenus();
         setJMenuBar(mb);
         setLocation(100, 20);
         pack();
         setVisible(true);
        static public void main(String[] args){
         JavaDraw javaDraw = new JavaDraw();
        private void initMenus(JMenu m,
                      String  miLabel,
                      int keyCode,
                      int menuMask,
                      ActionListener al){
         JMenuItem mi = new JMenuItem(miLabel);
         m.add(mi);
         mi.addActionListener(al);
         mi.setAccelerator(KeyStroke.getKeyStroke(keyCode, menuMask));
        private void createMenus(){
         JMenu m;
         m = new JMenu("File");
         for(int i = 0; i < fileMenuItems.length; i++)
             initMenus(m,
                    fileMenuItems,
              fileKeyCodes[i],
              menuMask,
              fileActionListeners[i]);
         mb.add(m);
         m = new JMenu("Edit");
         for(int i = 0; i < editMenuItems.length; i++)
         initMenus(m,
              editMenuItems[i],
              editKeyCodes[i],
              editMenuMasks[i],
              editActionListeners[i]);
         mb.add(m);
         m = new JMenu("Layering");
         for(int i = 0; i < layeringMenuItems.length; i++)
         initMenus(m,
              layeringMenuItems[i],
              layeringKeyCodes[i],
              menuMask,
              layeringActionListeners[i]);
         mb.add(m);
    *-------------------------------------------------------------- 80 columns ---|
    * The DrawingCanvas class a small extension of JComponent
    * @version 1.1 15/04/01
    * @author Julie Zelenski
    * @author (touched up by Ian A. Mason)
    * @see javax.swing.JComponent
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.util.*;
    public class DrawingCanvas extends JComponent{
    static final int DRAG_NONE = 0;
    static final int DRAG_CREATE = 1;
    static final int DRAG_RESIZE = 2;
    static final int DRAG_MOVE = 3;
    // list of all shapes on canvas
    protected Vector allShapes;          
    // currently selected shape (can be null at times)
    protected Rect selectedShape;
    // reference to toolbar to message for tool&color settings
    protected Toolbar toolbar;
    protected Rect clipboard=null;          
    /* These are the unimplemented menu commands. The menus are already
    * set up to send the correct messages to the canvas, but the
    * method bodies themselves are currently completely empty. It will
    * be your job to fill them in!
    public void cut() {
         copy();
         delete();
    public void copy() {
         int x=(int)selectedShape.getBounds().getX();
         int y=(int)selectedShape.getBounds().getY();
         Point p=new Point(x,y);
         clipboard=new Rect(p,this);
         clipboard.setBounds(selectedShape.getBounds());
    public void paste() {
         if(clipboard==null)
              return;
         allShapes.add(clipboard);
         setSelectedShape(clipboard);
         copy();
         this.repaint();
    public void delete() {
         if(selectedShape==null)
              return;
         else{
         int num=allShapes.indexOf(selectedShape);
         allShapes.remove(num);
         selectedShape=null;
         this.repaint();
    public void clearAll() {
         allShapes.removeAllElements();
         this.repaint();
    public void loadFile() {
         Load load=new Load(this);
         load.setSize(250,200);
         load.validate();
         load.setVisible(true);
    public void done(Vector vect){
         allShapes.removeAllElements();
         for(int i=0;i<vect.size();i++){
              allShapes.add(vect.elementAt(i));
         this.repaint();
    public void saveToFile() {
         Save save=new Save(allShapes);
         save.setSize(250,200);
         save.validate();
         save.setVisible(true);
    public void bringToFront() {
         if(selectedShape==null)
              return;
         int size=allShapes.size();
         int index=allShapes.indexOf(selectedShape);
         for(int i=index+1;i<=size-1;i++){
              allShapes.set(i-1,allShapes.elementAt(i));
         allShapes.set(size-1,selectedShape);
         this.repaint();
    public void sendToBack() {
         if(selectedShape==null)
              return;
         int index=allShapes.indexOf(selectedShape);
         for(int i=index-1;i>=0;i--){
              allShapes.remove(allShapes.elementAt(i+1));
              allShapes.add(i+1,allShapes.elementAt(i));
         allShapes.remove(allShapes.elementAt(0));
         allShapes.add(0,selectedShape);
         this.repaint();
    * Constructor for creating a new empty DrawingCanvas. We set up
    * our size and background colors, instantiate an empty vector of shapes,
    * and install a listener for mouse events using our inner class
    * CanvasMouseHandler
    public DrawingCanvas(Toolbar tb, int width, int height){
         setPreferredSize(new Dimension(width, height));
         setBackground(Color.white);
         toolbar = tb;
         allShapes = new Vector();
         selectedShape = null;
         CanvasMouseHandler handler = new CanvasMouseHandler();
         addMouseListener(handler);
         addMouseMotionListener(handler);
    * All components are responsible for drawing themselves in
    * response to repaint() requests. The standard method a component
    * overrides is paint(Graphics g), but for Swing components, the default
    * paint() handler calls paintBorder(), paintComponent() and paintChildren()
    * For a Swing component, you override paintComponent and do your
    * drawing in that method. For the drawing canvas, we want to
    * clear the background, then iterate through our shapes asking each
    * to draw. The Graphics object is clipped to the region to update
    * and we use to that avoid needlessly redrawing shapes outside the
    * update region.
    public void paintComponent(Graphics g){
         Rectangle regionToRedraw = g.getClipBounds();
         g.setColor(getBackground());
         g.fillRect(regionToRedraw.x, regionToRedraw.y,
              regionToRedraw.width, regionToRedraw.height);
         Iterator iter = allShapes.iterator();
         while (iter.hasNext())
         ((Rect)iter.next()).draw(g, regionToRedraw);
    * Changes the currently selected shape. There is at most
    * one shape selected at a time on the canvas. It is possible
    * for the selected shape to be null. Messages the shape to
    * change its selected state which will in turn refresh the
    * shape with the knobs active.
    protected void setSelectedShape(Rect shapeToSelect) {
         // if change in selection
         if (selectedShape != shapeToSelect) {
         // deselect previous selection
         if (selectedShape != null)
              selectedShape.setSelected(false);
         // set selection to new shape
         selectedShape = shapeToSelect;
         if (selectedShape != null) {
              shapeToSelect.setSelected(true);
    * A hit-test routine which finds the topmost shape underneath a
    * given point.We search Vector of shapes in back-to-front order
    * since shapes created later are added to end and drawn last, thus
    * appearing to be "on top" of the earlier ones. When a click comes
    * in, we want to select the top-most shape.
    protected Rect shapeContainingPoint(Point pt){
         for (int i = allShapes.size()-1; i >= 0; i--) {
         Rect r = (Rect)allShapes.elementAt(i);
         if (r.inside(pt)) return r;
         return null;
    * The inner class CanvasMouseHandler is the object that handles the
    * mouse actions (press, drag, release) over the canvas. Since there is
    * a bit of state to drag during the various operations (which shape,
    * where we started from, etc.) it is convenient to encapsulate all that
    * state with this little convenience object and register it as the
    * handler for mouse events on the canvas.
    protected class CanvasMouseHandler
         extends MouseAdapter implements MouseMotionListener {
         Point dragAnchor;          
         // variables using to track state during drag operations
         int dragStatus;
         /** When the mouse is pressed we need to figure out what
         * action to take. If the tool mode is arrow, the click might
         * be a select, move or reisze. If the tool mode is one of the
         * shapes, the click initiates creation of a new shape.
         public void mousePressed(MouseEvent event){
         Rect clicked = null;
         Point curPt = event.getPoint();
         // first, determine if click was on resize knob of selected shape
         if (toolbar.getCurrentTool() == Toolbar.SELECT) {
              if (selectedShape != null &&
              (dragAnchor = selectedShape.getAnchorForResize(curPt))
              != null) {
              // drag will resize this shape
              dragStatus = DRAG_RESIZE;     
              } else if ((clicked = shapeContainingPoint(curPt)) != null) {
              // if not, check if any shape was clicked
              setSelectedShape(clicked);
              // drag will move this shape      
              dragStatus = DRAG_MOVE;
              dragAnchor = curPt;
              } else {     
              // else this was a click in empty area,
              // deselect selected shape,
              setSelectedShape(null);
              // drag does nothing in this case
              dragStatus = DRAG_NONE;
         } else {
              Rect newShape = new Rect(curPt, DrawingCanvas.this);
              // create rect here
              allShapes.add(newShape);
              setSelectedShape(newShape);
              dragStatus = DRAG_CREATE;          
              // drag will create (resize) this shape
              dragAnchor = curPt;
         /** As the mouse is dragged, our listener will receive periodic
         * updates as mouseDragged events. When we get an update position,
         * we update the move/resize event that is in progress.
         public void mouseDragged(MouseEvent event){
         Point curPt = event.getPoint();
         switch (dragStatus) {
         case DRAG_MOVE:
              selectedShape.translate(curPt.x - dragAnchor.x,
                             curPt.y - dragAnchor.y);
              // update for next dragged event
              dragAnchor = curPt;
              break;
         case DRAG_CREATE: case DRAG_RESIZE:
              selectedShape.resize(dragAnchor, curPt);
              break;
         public void mouseMoved(MouseEvent e) {}
    /** A little helper routine that will be useful for the load & save
    * operations. It brings up the standard JFileChooser dialog and
    * allows the user to specify a file to open or save. The return
    * value is the full path to the chosen file or null if no file was
    * selected.
    protected String filenameChosenByUser(boolean forOpen){
         JFileChooser fc = new JFileChooser(System.getProperty("user.dir") +
                             java.io.File.separator + "Documents");
         int result = (forOpen? (fc.showOpenDialog(this)) :
              fc.showSaveDialog(this));
         java.io.File chosenFile = fc.getSelectedFile();
         if (result == JFileChooser.APPROVE_OPTION && chosenFile != null)
         return chosenFile.getPath();
         return null;
         // return null if no file chosen or dialog cancelled
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.Vector;
    import java.io.*;
    class Load extends JFrame implements ActionListener, Serializable{
         Container contentPane;
         JTextField jtf;
         JButton jb;
         Object obj=null;
         Load load;
         Thread thread;
         DrawingCanvas draw;
         public Load(DrawingCanvas dc){
              draw=dc;
              contentPane=getContentPane();
              contentPane.setLayout(new FlowLayout());
              jtf=new JTextField(20);
              jb=new JButton("Load");
              jb.addActionListener(this);
              contentPane.add(jtf);
              contentPane.add(jb);
         public void actionPerformed(ActionEvent e){
              String text=jtf.getText();
              SimpleObjectReader reader=SimpleObjectReader.openFileForReading(text+".shp");
              if(reader==null){
                   System.out.println("Couldn't open file!");
                   return;
              obj=reader.readObject();
              reader.close();
              draw.done((Vector)obj);
              this.setVisible(false);
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    import java.util.Vector;
    import java.io.*;
    class Save extends JFrame implements ActionListener, Serializable{
         Container contentPane;
         JTextField jtf;
         Vector shapes;
         JButton jb;
         public Save(Vector shapeVector){
              shapes=shapeVector;
              contentPane=getContentPane();
              contentPane.setLayout(new FlowLayout());
              jtf=new JTextField(20);
              jb=new JButton("Save");
              jb.addActionListener(this);
              contentPane.add(jtf);
              contentPane.add(jb);
         public void actionPerformed(ActionEvent e){
              String text=jtf.getText();
              SimpleObjectWriter writer=SimpleObjectWriter.openFileForWriting(text+".shp");
              if(writer==null){
                   System.out.println("Couldn't open file!");
                   return;
              writer.writeObject(shapes);
              writer.close();
              this.setVisible(false);
    *-------------------------------------------------------------- 80 columns ---|
    * The RectShape class defines a simple rectangular shape object.
    * It tracks its bounding box, selected state, and the canvas it is being
    * drawn in. It has some basic methods to select, move, and resize the
    * rectangle. It has methods that draw the shape in the selected or unselected
    * states and updates the canvas whenever the state or bounds of the rectangle
    * change. The code that is there works properly, but you will need to extend
    * and change the code to support additional features.
    * @version 1.1 15/04/01
    * @author Julie Zelenski
    * @author (touched up by Ian A. Mason)
    import java.awt.*;
    import java.io.*;
    public class Rect implements Serializable{     
    protected Rectangle bounds;
    protected boolean isSelected;
    public Color color;
    public DrawingCanvas canvas;
    protected static final int KNOB_SIZE = 6;
    protected static final int NONE = -1;
    protected static final int NW = 0;
    protected static final int SW = 1;
    protected static final int SE = 2;
    protected static final int NE = 3;
    /** The constructor that creates a new zero width and height rectangle
    * at the given position in the canvas.
    public Rect(Point start, DrawingCanvas dcanvas){
         canvas = dcanvas;
         bounds = new Rectangle(start);
         color=canvas.toolbar.getCurrentColor();
    /** The "primitive" for all resizing/moving/creating operations that
    * affect the rect bounding box. The current implementation just resets
    * the bounds variable and triggers a re-draw of the union of the old &
    * new rectangles. This will redraw the shape in new size and place and
    * also "erase" if bounds are now smaller than before. It is a good
    * design to have all changes to a critical variable bottleneck through
    * one method so that you can be sure that all the updating that goes
    * with it only needs to be implemented in this one place. If any of your
    * subclasses have additional work to do when the bounds change, this is
    * the method to override. Make sure that any methods that change the
    * bounds call this method instead of directly manipulating the variable.
    protected void setBounds(Rectangle newBounds){
         Rectangle oldBounds = bounds;
         bounds = newBounds;
         updateCanvas(oldBounds.union(bounds));
    /** The resize operation is called when first creating a rect, as well as
    * when later resizing by dragging one of its knobs. The two parameters
    * are the points that define the new bounding box. The anchor point
    * is the location of the mouse-down event during a creation operation
    * or the opposite corner of the knob being dragged during a resize
    * operation. The end is the current location of the mouse. If you
    * create the smallest rectangle which encloses these two points, you
    * will have the new bounding box. Use the setBounds() primitive which
    * is the bottleneck we are using for all geometry changes, it handles
    * updating and redrawing.
    public void resize(Point anchor, Point end){
         Rectangle newRect = new Rectangle(anchor);
         // creates smallest rectange which
         // includes both anchor & end
         newRect.add(end);
         // reset bounds & redraw affected areas
         setBounds(newRect);      
    public Rectangle getBounds(){
         return bounds;
    /** The translate operation is called when moving a shape by dragging in
    * the canvas. The two parameters are the delta-x and delta-y to move
    * by. Note that either or both can be negative. Create a new rectangle
    * from our bounds and translate and then go through the setBounds()
    * primitive to change it.
    public void translate(int dx, int dy){
         Rectangle newRect = new Rectangle(bounds);
         newRect.translate(dx, dy);
         setBounds(newRect);
    /** Used to change the selected state of the shape which will require
    * updating the affected area of the canvas to add/remove knobs.
    public void setSelected(boolean newState){
         isSelected = newState;
         // need to erase/add knobs
         // including extent of extended bounds
         updateCanvas(bounds, true);
    /** The updateCanvas() methods are used when the state has changed
    * in such a way that it needs to be refreshed in the canvas to properly
    * reflect the new settings. The shape should take responsibility for
    * messaging the canvas to properly update itself. The appropriate AWT/JFC
    * way to re-draw a component is to send it the repaint() method with the
    * rectangle that needs refreshing. This will cause an update() event to
    * be sent to the component which in turn will call paint(), where the
    * real drawing implementation goes. See the paint() method in
    * DrawingCanvas to see how it is implemented.
    protected void updateCanvas(Rectangle areaOfChange, boolean enlargeForKnobs){
         Rectangle toRedraw = new Rectangle(areaOfChange);
         if (enlargeForKnobs)
         toRedraw.grow(KNOB_SIZE/2, KNOB_SIZE/2);
         canvas.repaint(toRedraw);
    protected void updateCanvas(Rectangle areaOfChange){
         updateCanvas(areaOfChange, isSelected);
    /** When the DrawingCanvas needs a shape to draw itself, it sends a draw
    * message, passing the graphics context and the current region being
    * redrawn. If the shape intersects with that region, it must draw itself
    * doing whatever it takes to properly represent itself in the canvas
    * (colors, location, size, knobs, etc.) by messaging the Graphics object.
    public void draw(Graphics g, Rectangle regionToDraw){
         if (!bounds.intersects(regionToDraw))
         return;
         g.setColor(color);
         g.fillRect(bounds.x, bounds.y, bounds.width, bounds.height);
         if (isSelected) { // if selected, draw the resizing knobs
         // along the 4 corners
         Rectangle[] knobs = getKnobRects();
         for (int i = 0; i < knobs.length; i++)
              g.fillRect(knobs[i].x, knobs[i].y,
                   knobs[i].width, knobs[i].height);
    /** When the DrawingCanvas needs to determine which shape is under
    * the mouse, it asks the shape to determine if a point is "inside".
    * This method should returns true if the given point is inside the
    * region for this shape. For a rectangle, any point within the
    * bounding box is inside the shape.
    public boolean inside(Point pt){
         return bounds.contains(pt);
    /** When needed, we create the array of knob rectangles on demand. This
    * does mean we create and discard the array and rectangles repeatedly.
    * These are small objects, so perhaps it is not a big deal, but
    * a valid alternative would be to store the array of knobs as an
    * instance variable of the Shape and and update the knobs as the bounds
    * change. This means a little more memory overhead for each Shape
    * (since it is always storing the knobs, even when not being used) and
    * having that redundant data opens up the possibility of bugs from
    * getting out of synch (bounds move but knobs didn't, etc.) but you may
    * find that a more appealing way to go. Either way is fine with us.
    * Note this method provides a nice unified place for one override from
    * a shape subclass to substitute fewer or different knobs.
    protected Rectangle[] getKnobRects(){
         Rectangle[] knobs = new Rectangle[4];
         knobs[NW] = new Rectangle(bounds.x - KNOB_SIZE/2,
                        bounds.y - KNOB_SIZE/2, KNOB_SIZE, KNOB_SIZE);
         knobs[SW] = new Rectangle(bounds.x - KNOB_SIZE/2,
                        bounds.y + bounds.height - KNOB_SIZE/2,
                        KNOB_SIZE, KNOB_SIZE);
         knobs[SE] = new Rectangle(bounds.x + bounds.width - KNOB_SIZE/2,
                        bounds.y + bounds.height - KNOB_SIZE/2,
                        KNOB_SIZE, KNOB_SIZE);
         knobs[NE] = new Rectangle(bounds.x + bounds.width - KNOB_SIZE/2,
                        bounds.y - KNOB_SIZE/2,
                        KNOB_SIZE, KNOB_SIZE);
         return knobs;
    /** Helper method to determine if a point is within one of the resize
    * corner knobs. If not selected, we have no resize knobs, so it can't
    * have been a click on one. Otherwise, we calculate the knob rects and
    * then check whether the point falls in one of them. The return value
    * is one of NW, NE, SW, SE constants depending on which knob is found,
    * or NONE if the click doesn't fall within any knob.
    protected int getKnobContainingPoint(Point pt){
         // if we aren't selected, the knobs
         // aren't showing and thus there are no knobs to check
         if (!isSelected) return NONE;
         Rectangle[] knobs = getKnobRects();
         for (int i = 0; i < knobs.length; i++)
         if (knobs[i].contains(pt))
              return i;
         return NONE;
    /** Method used by DrawingCanvas to determine if a mouse click is starting
    * a resize event. In order for it to be a resize, the click must have
    * been within one of the knob rects (checked by the helper method
    * getKnobContainingPoint) and if so, we return the "anchor" ie the knob
    * opposite this corner that will remain fixed as the user drags the
    * resizing knob of the other corner around. During the drag actions of a
    * resize, that fixed anchor point and the current mouse point will be
    * passed to the resize method, which will reset the bounds in response
    * to the movement. If the mouseLocation wasn't a click in a knob and
    * thus not the beginning of a resize event, null is returned.
    public Point getAnchorForResize(Point mouseLocation){
         int whichKnob = getKnobContainingPoint(mouseLocation);
         // no resize knob is at this location
         if (whichKnob == NONE)
         return null;
         switch (whichKnob) {
         case NW: return new Point(bounds.x + bounds.width,
                        bounds.y + bounds.height);
         case NE: return new Point(bounds.x, bounds.y + bounds.height);
         case SW: return new Point(bounds.x + bounds.width, bounds.y);
         case SE: return new Point(bounds.x, bounds.y);
         return null;
    import java.io.*;
    * SimpleObjectReader is a small class to wrap around the usual ObjectStream
    * to shield you from the exception handling which we haven't yet gotten
    * to in class.
    * <P>It has just three methods of note: one to open a new file for reading,
    * one to read an object from an open file, and one to close the file when done.
    * <P>Any object that you attempt to read must properly implement the Serializable
    * interface. Here is a simple example that shows using the SimpleFileReader to
    * to rehydrate objects from a file and print them:
    * <PRE>
    * SimpleObjectReader reader = SimpleObjectReader.openFileForReading("shapes");
    * if (reader == null) {
    * System.out.println("Couldn't open file!");
    * return;
    * Object obj;
    * while ((obj = reader.readObject()) != null)
    * System.out.println(obj);
    * reader.close();
    * </PRE>
    * <P>You are free to edit or extend this class, but we don't expect that
    * you should need to make any changes.
    * @version 1.1 15/04/01
    * @author Julie Zelenski
    * @author (touched up by Ian A. Mason)
    public class SimpleObjectReader {
    private ObjectInputStream ois;
    * Opens a new file for reading. The filename can either be a relative
    * path, which will be relative to the working directory of the program
    * when started, or an absolute path. If the file exists and can be
    * opened, a new SimpleObjectReader is returned. If the file cannot be
    * opened (for any reason: wrong name, wrong path, lack of permissions, etc.)
    * null is returned.
    public static SimpleObjectReader openFileForReading(String filename){
         try {
         return new SimpleObjectReader(new ObjectInputStream(new FileInputStream(filename)));
         } catch(IOException e) {     
         return null;
    * Reads a single object from the file and returns it. If there are
    * no more objects in the file (i.e, we have reached the end of file),
    * null is returned null is returned. null is also
    * returned on any I/O error.
    public Object readObject (){
         try {
         return ois.readObject();
         } catch (IOException e) {
         e.printStackTrace();
         return null;
         } catch (ClassNotFoundException e) {
         e.printStackTrace();
         return null;
    * Closes the file when done reading. You should close a reader when
    * you are finished to release the OS resources for use by others.
    public void close (){
         try {
         ois.close();
         catch (IOException e) {}
    * Constructor is private so that only means to create a new reader
    * is through the static method which does error checking.
    private SimpleObjectReader(ObjectInputStream ois){
         this.ois = ois;
    import java.io.*;
    * SimpleObjectWriter is a small class to wrap around the usual
    * ObjectOutputStream to shield you from the exception handling
    * which we haven't yet gotten to in class.
    * <P>It has just three methods of note: one to open a new file for writing,
    * one to write an object to the file, and one to close the
    * the file when done.
    * <P>Here is a simple example that shows using the SimpleObjectWriter
    * to create a new file and write some objects into it:
    * <PRE>
    * SimpleObjectWriter writer =
    * SimpleObjectWriter.openFileForWriting("objects");
    * if (writer == null) {
    * System.out.println("Couldn't open file!");
    * return;
    * writer.writeObject("Here is a string");
    * writer.writeObject("And another one.");
    * writer.writeObject(new Date());
    * writer.close();
    * </PRE>
    * <P>You are free to edit or extend this class, but we don't expect that
    * you should need to make any changes.
    * @version 1.1 15/04/01
    * @author Julie Zelenski
    * @author (touched up by Ian A. Mason)
    public class SimpleObjectWriter {
    private ObjectOutputStream oos;
    * Opens a new file for writing. The filename can either be a relative
    * path, which will be relative to the working directory of the program
    * when started, or an absolute path. If the file can be created, a
    * new SimpleObjectWriter is returned. If the file already exists, this
    * will overwrite its content

    I'm not reading that either, but to help you for next time:
    - use more than 1 sentence to describe your problem
    - only post the RELEVANT code, or a small test program with the same problem if possible.
    At least you formatted it, I'll give you that.
    Cheers,
    Radish21
    PS. I think in this case, posting another (better worded) thread might be a good idea, because no one is going to read this one. In general though, don't :)

  • Problems with the Proxy Programme--Please help

    Hi All,
    I have written a simple proxy server in the form of a servlet. I changed the proxy config of my browser to connect to this servlet hosted on the default context(http://localhost:8080) of the Tomcat 5.0.25 . Well , this servlet internally connects to the proxy of the corporate LAN . The logic that I have applied is as follows. The servlet gets the request from the client (ie the browser in this case) , extracts the headers and contents from the request, sets them to a new request that it forms and finally send this new request to the proxy. When the proxy responds, the servlet collects the response headers and contents adn writes them in its response. To sum up , this servlet transparently carries the requests and responses between the client(browser) and the corporate LAN proxy. Now the problem is this. Let's say , now I am accessing http://www.google.com.The browser sends a request to my servlet with the following headers as they are extracted by my servlet.
    ProxyServer:::>posting request
    ProxyServer:::>headerValue::> headerName = accept : headerValue=*/*
    ProxyServer:::>headerValue::> headerName = referer : headerValue=http://www.google.com/
    ProxyServer:::>headerValue::> headerName = accept-language : headerValue=en-us
    ProxyServer:::>headerValue::> headerName = proxy-connection : headerValue=Keep-Alive
    ProxyServer:::>headerValue::> headerName = user-agent : headerValue=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; UB1.4_IE6.0_SP1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)
    ProxyServer:::>headerValue::> headerName = host : headerValue=www.google.com
    ProxyServer:::>headerValue::> headerName = cookie : headerValue=PREF=ID=1be27c0a74f198ca:TM=1082058853:LM=1082058853:S=bu6ORrygzm8AUkm8
    ProxyServer:::>postRequest
    I set these headers into a new connection opened to the proxy and post a fresh request to the proxy,which, in turn responds with the following headers.
    ProxyServer:::>posted request successfully
    ProxyServer:::>writing response
    ProxyServer:::>writeResponse-->headerName = Proxy-Connection : headerValue = [close]
    ProxyServer:::>writeResponse-->headerName = Content-Length : headerValue = [257]
    ProxyServer:::>writeResponse-->headerName = Date : headerValue = [Tue, 13 Jul 2004 14:01:40 GMT]
    ProxyServer:::>writeResponse-->headerName = Content-Type : headerValue = [text/html]
    ProxyServer:::>writeResponse-->headerName = Server : headerValue = [NetCache appliance (NetApp/5.5R2)]
    ProxyServer:::>writeResponse-->headerName = Proxy-Authenticate : headerValue = [Basic realm="Charlotte - napxyclt2"]
    ProxyServer:::>writeResponse-->headerName = null : headerValue = [HTTP/1.1 407 Proxy Authentication Required]
    ProxyServer:::>writeResponse exiting
    ProxyServer:::>wrote response successfully
    I write these headers back to the client. According to what I was thinking, the client ie the browser would open a new dialog box asking for username/password owing to the presence of the "Proxy-Authenticate " header. But it does not happen that way. Rather the browser stops responsding and displays a blank page. Does anyone know why it happens this way? I am pasting the server prog below for everybody's reference.
    package server.proxy;
    //import all servlet related classes
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.util.*;
    import java.io.*;
    import java.net.*;
    import server.resources.*;
    //My Proxy server --->Currently it is very simplea and relies on
    //other proxy servers of an already connected network.
    public class ProxyServer extends HttpServlet
    //stores the resource bundle
    private ServerResBundle resBundle = null;
    //checks for the mode of operation
    private boolean proxySet = false;
    private String proxy = null;
    //storing the original System out/err etc
    private PrintStream sysOutOrig = null;
    private PrintStream sysErrOrig = null;
    private InputStream sysInOrig = null;
    //initialise certain features that are required later
    public void init() throws ServletException
    try
    //initialise the resource bundle
    this.initResBundle();
    System.out.println("ProxyServer:::>res bundle init");
    //set the mode of operation
    this.setMode();
    System.out.println("ProxyServer:::>mode set");
    //set the system out and err --System.setOut etc
    this.setSystemOutErr();
    System.out.println("ProxyServer:::>in/out/err set");
    }//End try
    catch(Exception e)
    System.out.println("Exception in init..."+(e.getMessage()));
    throw new ServletException(e);
    }//Edn
    catch(Throwable e)
    System.out.println("Irrecoverable Error...");
    throw new ServletException(e);
    }//End
    }//End init
    //method to init the resource bundle;
    private void initResBundle()
    this.resBundle = ServerResBundle.getBundle();
    }//End
    //method to set the mode of the server--proxy or direct
    private void setMode()
    //read the target proxy property from the bundle and
    //if it is set,take that URL
    String temp = (String)(this.resBundle.getResource(ResKeys.PROXY_SERVER));
    if ( (temp != null) && (temp.length() > 0) )
    this.proxySet = true;
    this.proxy = temp;
    temp = null;
    }//End
    }//End
    //method to set the system out and err etc
    private void setSystemOutErr() throws Exception
    //keep a copy of the original system out and error
    this.sysOutOrig = System.out;
    this.sysErrOrig = System.err;
    try
    //read the options adn if they are set, take the values directly
    String newOutStr = (String)(this.resBundle.getResource(ResKeys.SYSTEM_OUT));
    String newErrStr = (String)(this.resBundle.getResource(ResKeys.SYSTEM_ERR));
    if ((newOutStr != null) && (newOutStr.length() > 0))
    System.setOut(new PrintStream(new FileOutputStream(new File(newOutStr),true),true));
    }//End if
    if ((newErrStr != null) && (newErrStr.length() > 0))
    System.setErr(new PrintStream(new FileOutputStream(new File(newErrStr),true),true));
    }//End if
    }//End
    catch(Exception e)
    //restore the stuff
    System.setOut(this.sysOutOrig);
    System.setErr(this.sysErrOrig);
    }//End
    }//End
    //this is where the proxy functionalities will be embedded
    public void service(HttpServletRequest req,HttpServletResponse resp)
    throws ServletException,java.io.IOException
    //conenction URL
    URL target = null;
    //conenction to the remote object
    URLConnection targetConn = null;
    //stores the OOS and the OIS
    ObjectOutputStream oos = null;
    ObjectInputStream ois = null;
    try
    //check for the mode of operation
    if (proxySet)
    URLConnection objects go through two phases: first they are created, then they are connected.
    After being created, and before being connected, various options can be specified
    (e.g., doInput and UseCaches). After connecting, it is an error to try to set them.
    Operations that depend on being connected, like getContentLength, will implicitly perform the connection,
    if necessary.
    //for the URL to the proxy
    target=new URL(this.proxy);
    //conenct to the proxy
    targetConn = target.openConnection();
    //set the details of the connectuon
    targetConn.setDoInput(true);
    targetConn.setDoOutput(true);
    targetConn.setUseCaches(false);
    // If true, this URL is being examined in a context in which it makes sense to allow user interactions such as popping up an authentication dialog. If false, then no user interaction is allowed
    targetConn.setAllowUserInteraction(true);
    //connect to the remote object
    // targetConn.connect();//call this only when all the request properties are set
    System.out.println("ProxyServer:::>posting request");
    //post the received request to the URL
    this.postRequest(targetConn,req);
    System.out.println("ProxyServer:::>posted request successfully");
    System.out.println("ProxyServer:::>writing response");
    //receive the response
    //write the received response to the client
    this.writeResponse(targetConn,resp);
    System.out.println("ProxyServer:::>wrote response successfully");
    }//End if
    else
    //currently this functionality is not supported
    throw new ServletException(
    (String)(this.resBundle.getResource(ResKeys.ERR_FUNC_NOTSUPPORTED)));
    }//End
    }//End try
    catch(Exception e)
    if(e instanceof ServletException)
    throw (ServletException)e;
    }//End
    if (e instanceof IOException)
    throw (IOException)e;
    }//End
    //wrap it up in ServletException
    throw new ServletException(e);
    }//End
    }//End
    //method to write the response back to the client
    private void writeResponse(URLConnection targetConn,HttpServletResponse resp)
    throws ServletException
    //get all the header fields from the response connection and set them to the
    //response of the servlet
    Map headerFields = null;
    Iterator headerFieldEntries = null;
    Map.Entry header = null;
    //stores the input stream to the conn
    BufferedReader brConn = null;
    //stores the writer to the response
    PrintWriter prResp = null;
    //checks if the proxy authentication needed or not
    boolean proxyAuthReqd = false;
    try
    //juste ensuring that the proxy authentication is reset
    proxyAuthReqd = false;
    if( (targetConn != null) && (resp != null) )
    //Returns an unmodifiable Map of the header fields.
    //The Map keys are Strings that represent the response-header field names.
    //Each Map value is an unmodifiable List of Strings that represents the corresponding
    //field values
    headerFields = targetConn.getHeaderFields();
    //Returns a set view of the mappings contained in this map
    Set temp = headerFields.entrySet();
    //Returns an iterator over the elements in this set
    headerFieldEntries = temp.iterator();
    if (headerFieldEntries != null)
    while (headerFieldEntries.hasNext())
    Object tempHeader = headerFieldEntries.next();
    if (tempHeader instanceof Map.Entry)
    header = (Map.Entry)tempHeader;
    Object headerName = header.getKey();
    Object headerValue=header.getValue();
    System.out.println("ProxyServer:::>writeResponse-->headerName = "+headerName+" : headerValue = "+headerValue);
    //do not select the key-value pair if both the key adn the value are null
    if ( ( headerName == null) && (headerValue == null) )
    continue;
    }//Enmd
    if (headerValue != null)
    List headerValList = null;
    if (headerValue instanceof List)
    headerValList = (List)headerValue;
    }//End
    if(headerValList != null)
    for (int i=0;i<headerValList.size();i++)
    Object headerValueStr = headerValList.get(i);
    if (headerValueStr instanceof String)
    //note that the header-key can not be null for addHeader
    //I have made this temporary provision to make the programme work.
    resp.addHeader(( (headerName==null)? ("null_header"+i) :(String)headerName),
    (String)headerValueStr);
    //check if the proxy authentication required or not
    if (((String)headerValueStr).
    indexOf(resp.SC_PROXY_AUTHENTICATION_REQUIRED+"") != -1)
    System.out.println("ProxyServer:::>writeResponse-->proxy auth needed");
    //proxy authentication is needed
    proxyAuthReqd = true;
    }//End
    }//Ednd of
    else if (headerValueStr == null)
    resp.addHeader(( (headerName==null)? null :(String)headerName),
    null);
    }//End
    }//End for
    }//End if
    }//End if
    }//End
    }//End while
    }//End if
    //get the writer to the client
    prResp = resp.getWriter();
    System.out.println("ProxyServer:::>writeResponse-->proxyAuthReqd="+proxyAuthReqd);
    //juste test a simple header
    System.out.println("Proxy-Authenticate = "+(resp.containsHeader("Proxy-Authenticate")));
    //if the proxy asks you for authentication,pass on the same to the client
    //from whom you have received the request.When this flag is true,the connection
    //is closed by the remotehost adn hence any attempt to open in input steram
    //results in an error ie IOException
    if (!proxyAuthReqd)
    //now get the content adn write it to the response too
    brConn = new BufferedReader(new InputStreamReader(
    targetConn.getInputStream()));
    String tempStr = null;
    while ((tempStr = brConn.readLine())!=null)
    prResp.println(tempStr);
    }//End while
    //close the connections
    brConn.close();
    }//End if
    else
    prResp.println("Proxy Authentication needed...");
    }//End
    //close the streams
    prResp.flush();
    prResp.close();
    }//End if
    System.out.println("ProxyServer:::>writeResponse exiting\n");
    }//End try
    catch(Exception e)
    throw new ServletException(e);
    }//End
    }//End
    //method to post request to the internet
    private void postRequest(URLConnection targetConn,HttpServletRequest req)
    throws ServletException
    //extract the header parameters and the body content from the incoming request
    //and set them to the new connection
    Enumeration reqHeaders = null;
    //reads the incoming request's content
    BufferedReader brReqRd = null;
    PrintWriter prResWt = null;
    //stores temp header names and values
    String headerName = null;
    String headerValue = null;
    try
    if( (targetConn != null) && (req != null) )
    reqHeaders = req.getHeaderNames();
    //extract a header adn set it to the new connection
    while (reqHeaders.hasMoreElements())
    headerName = (String)(reqHeaders.nextElement());
    headerValue = req.getHeader(headerName);
    targetConn.setRequestProperty(headerName,headerValue);
    System.out.println("ProxyServer:::>headerValue::> headerName = "+headerName+" : headerValue="+headerValue);
    }//End
    System.out.println("ProxyServer:::>postRequest\n");
    //establis the actual connection
    //calling this method bfore the above loop results in IllegalStateException
    targetConn.connect();
    //NOTE : try reading from and writing into OIS and OOS respectively
    //now read the contents and write them to the connection
    // brReqRd = req.getReader(); //this hangs for some reason
    brReqRd = new BufferedReader(new InputStreamReader(req.getInputStream()));
    System.out.println("Got the reader..brReqRd = "+brReqRd);
    if (brReqRd != null)
    String temp = null;
    //establish the printwriter
    // prResWt = new PrintWriter(targetConn.getOutputStream(),true);
    prResWt = new PrintWriter(targetConn.getOutputStream());
    System.out.println("trying to read in a loop from brReqRd.. ready="+(brReqRd.ready()));
    while( (brReqRd.ready()) && ((temp=brReqRd.readLine()) != null) )
    System.out.println("In while::>temp = "+temp);
    prResWt.println(temp);
    }//Emd while
    //close the streams adn go back
    brReqRd.close();
    prResWt.flush();
    prResWt.close();
    }//End
    }//End outer if
    System.out.println("ProxyServer:::>postRequest exiting\n");
    }//End try
    catch(Exception e)
    throw new ServletException(e);
    }//End
    }//End
    }//End

    Hi serlank ,
    Thanks for your reply. Well , I initially I thought of not pasting the code,as it was too long. But I could not help it,as I thought I must show in code what I exactly meant. That's why I followed a description of my problem with the code. You could probably have copied the code and pasted it in one of your favourite editors to take a look at it. Did you,by any chance, try to read it on the browser? And as regards reposting the same message, I can say that I did it as I felt the subject was not quite appropriate in the first posting and I was not sure as to how I could delete/alter the posting. I am not asking for a code-fix,but some suggestions from some one who might ever have come across such a thing.Anyway, lemme know if you have any idea on it. Thanks...

  • Need help with JSP - Session Bean scenario

    I have massive problems with a simple JSP <--> Statefull Session Bean scenario with Server Platform Edition 8.2 (build b06-fcs)
    What I do is generating a Collection in session bean returning it to JSP
    and giving the List back to Session Bean.
    A weird exception happens when giving the List back to Session Bean
    (see Exception details below)
    The same code runs without any trouble on Jboss Application Server 4.0.3
    Any help would be great!
    Please see code below
    Statefull Session Bean
    <code>
    package ejb;
    import data.Produkt;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    import javax.ejb.*;
    * This is the bean class for the WarenkorbBean enterprise bean.
    * Created 17.03.2006 09:53:25
    * @author Administrator
    public class WarenkorbBean implements SessionBean, WarenkorbRemoteBusiness, WarenkorbLocalBusiness {
    private SessionContext context;
    // <editor-fold defaultstate="collapsed" desc="EJB infrastructure methods. Click the + sign on the left to edit the code.">
    // TODO Add code to acquire and use other enterprise resources (DataSource, JMS, enterprise bean, Web services)
    // TODO Add business methods or web service operations
    * @see javax.ejb.SessionBean#setSessionContext(javax.ejb.SessionContext)
    public void setSessionContext(SessionContext aContext) {
    context = aContext;
    * @see javax.ejb.SessionBean#ejbActivate()
    public void ejbActivate() {
    * @see javax.ejb.SessionBean#ejbPassivate()
    public void ejbPassivate() {
    * @see javax.ejb.SessionBean#ejbRemove()
    public void ejbRemove() {
    // </editor-fold>
    * See section 7.10.3 of the EJB 2.0 specification
    * See section 7.11.3 of the EJB 2.1 specification
    public void ejbCreate() {
    // TODO implement ejbCreate if necessary, acquire resources
    // This method has access to the JNDI context so resource aquisition
    // spanning all methods can be performed here such as home interfaces
    // and data sources.
    // Add business logic below. (Right-click in editor and choose
    // "EJB Methods > Add Business Method" or "Web Service > Add Operation")
    public Collection erzeugeWarenkorb() {
    //TODO implement erzeugeWarenkorb
    ArrayList myList = new ArrayList();
    for (int i=0;i<10;i++)
    Produkt prod = new Produkt();
    prod.setID(i);
    prod.setName("Produkt"+i);
    myList.add(prod);
    return myList;
    public void leseWarenkorb(Collection Liste) {
    //TODO implement leseWarenkorb
    Iterator listIt = Liste.iterator();
    while(listIt.hasNext())
    Produkt p = (Produkt)listIt.next();
    System.out.println("Name des Produktes {0} "+p.getName());
    </code>
    <code>
    package data;
    import java.io.Serializable;
    * @author Administrator
    public class Produkt implements Serializable {
    private int ID;
    private String Name;
    /** Creates a new instance of Produkt */
    public Produkt() {
    public int getID() {
    return ID;
    public void setID(int ID) {
    this.ID = ID;
    public String getName() {
    return Name;
    public void setName(String Name) {
    this.Name = Name;
    </code>
    <code>
    <%@page contentType="text/html"%>
    <%@page pageEncoding="UTF-8"%>
    <%@page import="java.util.*"%>
    <%@page import="data.*"%>
    <%@page import="javax.naming.*"%>
    <%@page import="javax.rmi.PortableRemoteObject"%>
    <%@page import="ejb.*"%>
    <%--
    The taglib directive below imports the JSTL library. If you uncomment it,
    you must also add the JSTL library to the project. The Add Library... action
    on Libraries node in Projects view can be used to add the JSTL 1.1 library.
    --%>
    <%--
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    --%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
    </head>
    <body>
    <h1>Online Shop Warenkorb Test</h1>
    <%--
    This example uses JSTL, uncomment the taglib directive above.
    To test, display the page like this: index.jsp?sayHello=true&name=Murphy
    --%>
    <%--
    <c:if test="${param.sayHello}">
    <!-- Let's welcome the user ${param.name} -->
    Hello ${param.name}!
    </c:if>
    --%>
    <%
    Context myEnv = null;
    WarenkorbRemote wr = null;
    // Context initialisation
    try
    myEnv = (Context)new javax.naming.InitialContext();
    /*Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
    //env.put(Context.PROVIDER_URL, "jnp://wotan.activenet.at:1099");
    env.put(Context.PROVIDER_URL, "jnp://localhost:1099");
    env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
    myEnv = new InitialContext(env);*/
    catch (Exception ex)
    System.err.println("Fehler beim initialisieren des Context: " + ex.getMessage());
    // now lets work
    try
    Object ref = myEnv.lookup("ejb/WarenkorbBean");
    //Object ref = myEnv.lookup("WarenkorbBean");
    WarenkorbRemoteHome warenkorbrhome = (WarenkorbRemoteHome)
    PortableRemoteObject.narrow(ref, WarenkorbRemoteHome.class);
    wr = warenkorbrhome.create();
    ArrayList myList = (ArrayList)wr.erzeugeWarenkorb();
    Iterator it = myList.iterator();
    while(it.hasNext())
    Produkt p = (Produkt)it.next();
    %>
    ProduktID: <%=p.getID()%><br></br>Produktbezeichnung:
    <%=p.getName()%><br></br><%
    wr.leseWarenkorb(myList);
    catch(Exception ex)
    %><p style="color:red">Onlineshop nicht erreichbar</p><%=ex.getMessage()%>
    <% }
    %>
    </body>
    </html>
    </code>
    the exception
    CORBA MARSHAL 1398079745 Maybe; nested exception is: org.omg.CORBA.MARSHAL: ----------BEGIN server-side stack trace---------- org.omg.CORBA.MARSHAL: vmcid: SUN minor code: 257 completed: Maybe at com.sun.corba.ee.impl.logging.ORBUtilSystemException.couldNotFindClass(ORBUtilSystemException.java:8101) at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1013) at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:879) at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_abstract_interface(CDRInputStream_1_0.java:873) at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_abstract_interface(CDRInputStream_1_0.java:863) at com.sun.corba.ee.impl.encoding.CDRInputStream.read_abstract_interface(CDRInputStream.java:275) at com.sun.corba.ee.impl.io.IIOPInputStream.readObjectDelegate(IIOPInputStream.java:363) at com.sun.corba.ee.impl.io.IIOPInputStream.readObjectOverride(IIOPInputStream.java:526) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:333) at java.util.ArrayList.readObject(ArrayList.java:591) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at com.sun.corba.ee.impl.io.IIOPInputStream.invokeObjectReader(IIOPInputStream.java:1694) at com.sun.corba.ee.impl.io.IIOPInputStream.inputObject(IIOPInputStream.java:1212) at com.sun.corba.ee.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:400) at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:330) at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:296) at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1034) at com.sun.corba.ee.impl.encoding.CDRInputStream.read_value(CDRInputStream.java:259) at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl$14.read(DynamicMethodMarshallerImpl.java:333) at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.readArguments(DynamicMethodMarshallerImpl.java:393) at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:121) at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:648) at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:192) at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1709) at com.sun.corba.ee.impl.protocol.SharedCDRClientRequestDispatcherImpl.marshalingComplete(SharedCDRClientRequestDispatcherImpl.java:155) at com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.invoke(CorbaClientDelegateImpl.java:184) at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:129) at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:150) at com.sun.corba.ee.impl.presentation.rmi.bcel.BCELStubBase.invoke(Unknown Source) at ejb._WarenkorbRemote_DynamicStub.leseWarenkorb(_WarenkorbRemote_DynamicStub.java) at org.apache.jsp.index_jsp._jspService(index_jsp.java:122) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:105) at javax.servlet.http.HttpServlet.service(HttpServlet.java:860) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:336) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:297) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:247) at javax.servlet.http.HttpServlet.service(HttpServlet.java:860) at sun.reflect.GeneratedMethodAccessor96.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:249) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAsPrivileged(Subject.java:517) at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:282) at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:165) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:257) at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:55) at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:161) at java.security.AccessController.doPrivileged(Native Method) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:263) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:225) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:173) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:132) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:933) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:189) at com.sun.enterprise.web.connector.grizzly.ProcessorTask.doProcess(ProcessorTask.java:604) at com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:475) at com.sun.enterprise.web.connector.grizzly.ReadTask.executeProcessorTask(ReadTask.java:371) at com.sun.enterprise.web.connector.grizzly.ReadTask.doTask(ReadTask.java:264) at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:281) at com.sun.enterprise.web.connector.grizzly.WorkerThread.run(WorkerThread.java:83) Caused by: java.lang.ClassNotFoundException ... 69 more ----------END server-side stack trace---------- vmcid: SUN minor code: 257 completed: Maybe

    Hi,
    I have found a way out by passing the reference of my EJB in the HttpSession object and using it inside the javabean..

  • Help with Kevin Bacon game

    I would really appreciate some help. Yes this is an assignment who in his crazy mind would try to do this just to learn or practice their java. I have some code already done but I ran out of memory. The other thing my code works like the one at Virginia University. I'm awarding 10 dukes I can award another 10 dukes. I'll let you know later, thanks in advance.
    This is the code I have:
    import java.io.*;
    import java.util.zip.*;
    import java.util.ArrayList;
    import java.util.Map;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Set;
    import java.util.Iterator;
    * A class that download files , create Maps and search for information with
    * in the maps, giving an output of the actor that share more movies with the
    * input actor that the user gives
    public class DataBase
      private Map map1 = new HashMap( );  // actor
      private Map map2= new HashMap( );   //movies
      private int okactor = 0;
    // Main Method
      public static void main (String args [])throws IOException
        DataBase testing = new DataBase();
        System.out.println("Program was run in Pentium 4 in AUL");
        System.out.println("Starting Time : " + System.currentTimeMillis());
        testing.loadFile("C:\\My Documents\\FIU\\COP3530_Data_Strutures\\program5\\actresses.list.gz");   
        testing.loadFile("C:\\My Documents\\FIU\\COP3530_Data_Strutures\\program5\\actors.list.gz");
        //testing.loadFile("\\\\Cougar\\cop3530\\actresses.list.gz");   
        //testing.loadFile("\\\\Cougar\\cop3530\\actors.list.gz");
        System.out.println(" Ending Time of Downloading:  " + System.currentTimeMillis());
        int infiniteloop = 0 ;
           while (infiniteloop == 0)
                     System.out.println("Number of Actors and Actresses : " + testing.getActorCount());
                  System.out.println("Number of Movies: " + testing.getMovieCount());  
                      System.out.println("");
                      System.out.println("Enter a name please");
                      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
                      String name = in.readLine(); 
                      testing.computeSharedMovies(name);
                  List listofnames = new ArrayList();
                  listofnames =  testing.mostSharedMovies();  
                  testing.print(name, listofnames);
    //static class actor 
      private static final class Actor
         String name;
         int    data;  // number of shared movies,
                       // determined by computeSharedMovies
         public String toString( )
           { return name; }
         public int hashCode( )
           { return name.hashCode( ); }
         public boolean equals( Object other )
           { return (other instanceof Actor) &&
                    ( (Actor) other ).name.equals( name );
    *Loads the two files files
    *@param String is the fileName to be download
      public void loadFile( String fileName ) throws IOException
           BufferedReader x = new BufferedReader ( new InputStreamReader(new GZIPInputStream (new BufferedInputStream( new FileInputStream(fileName)))));
                String line;
          int start = 0 ;
          ArrayList actorList = new ArrayList();
          ArrayList movies = new ArrayList();
          Actor key = new Actor();
          int p = 0;    //parameters
          int p2 =0 ;
          String you = null ;
          String year = null;
          String trimMovie = null;
          int par1 = 0;    //parameter
          int par2 =0;
          String addingmovie = null;
            while((line = x.readLine()) != null)
                if(line.indexOf("Name") == 0 )
                      start++;
                if(start == 0)
                continue;
                  if( start >= 1)
                                  if(line.indexOf("-----------------------") == 0)
                                          break;
                                  if(((line.trim()).length()) == 0)
                                         continue;
                                  else if(line.indexOf("----") == 0)
                                          continue;
                                     else if (line.indexOf("Name") == 0)
                                             continue;
                                  else if(line.indexOf("\t") != 0)
                                     p  = line.indexOf("\t");
                                     p2 = line.lastIndexOf(")");
                                     String actor = (line.substring(0,p));
                                       key = new Actor();
                                       key.name = actor;                              
                                        you = (line.substring(p, (p2 + 1)));
                                          if (you.indexOf("(TV)") > 0)
                                                         continue;                                                                                                
                                       p = you.indexOf("\t");
                                       p2 = you.indexOf(")");
                                      you = (you.substring(p, p2 +1)).trim();                                 
                                            if(you.indexOf("\"") == 0)
                                                    continue;                                                                                        
                                            year = you ;
                                       p = year.indexOf("(");
                                       p2 = year.indexOf(")");
                                       year = year.substring(p + 1 , p2);                                 
                                            if ( ( ((Comparable)year).compareTo("2002") ) >= 0)
                                                    continue;                                                                                         
                                     you = you.intern();                                                                  
                                     movies = new ArrayList();
                                      movies.add(you);
                                     movies.trimToSize() ;                    
                                        map1.put(key , movies);
                                           if(map2.containsKey(you))
                                                      ((ArrayList)map2.get(you)).add(key) ;
                                            else
                                                         actorList = new ArrayList();
                                                           actorList.add(key);
                                                           actorList.trimToSize() ;                                                          
                                                           map2.put(you, actorList);
                               else if(line.indexOf("\t") == 0)
                                    par1 = line.indexOf(")");
                                    par2 = line.indexOf("\t");
                                    trimMovie = (line.substring(par2, par1 +1)).trim();
                                    trimMovie = trimMovie.intern();                              
                                    String ye = trimMovie;
                                    par1 = trimMovie.indexOf("(");
                                    par2 = trimMovie .indexOf(")");                              
                                    ye = (ye.substring(par1 + 1 , par2));                             
                                     addingmovie = (line.trim());
                                           if(addingmovie.indexOf("(TV)") > 0)
                                           else if ( (((Comparable)ye).compareTo("2002")) >= 0)
                                           else  if(addingmovie.indexOf("\"") == 0)
                                           else if(addingmovie.indexOf("(archive footage)") > 0)
                                            else
                                                     if(map1.containsKey(key))
                                                                 ((ArrayList)map1.get(key)).add(trimMovie);                         
                                                              ((ArrayList)map1.get(key)).trimToSize() ;
                                                    else
                                                          movies = new ArrayList();
                                                          movies.add(trimMovie);
                                                          movies.trimToSize() ;
                                                          map1.put(key, movies);
                                              if(map2.containsKey(trimMovie))
                                                 {     ((ArrayList)map2.get(trimMovie)).add(key);
                                                     ((ArrayList)map2.get(trimMovie)).trimToSize() ;
                                            else
                                                           actorList = new ArrayList();
                                                         actorList.add(key);
                                                        actorList.trimToSize() ;
                                                        map2.put(trimMovie, actorList);
    *Compute the amount of shared movies for all actor compared to the one
    *given from the user
    *@param String actor is the actor that the user wish to search for some
    *other actors/actresses with the most shared movies with him
        public void computeSharedMovies( String actor )
             Actor actor2 = new Actor();
             actor2.name = actor;
            if(map1.containsKey(actor2))
                  okactor = 0 ;
                  Actor actor3 = new Actor();
                  actor3 = actor2;
                      for(int count = 0 ; count < ((ArrayList)(map1.get(actor2))).size() ; count++)
                           String movie = (String)((ArrayList)(map1.get(actor2))).get(count);      
                                for (int count2 = 0 ; count2 < ((ArrayList)map2.get(movie)).size() ; count2++)     
                                          Actor iuu = (Actor)((ArrayList)map2.get(movie)).get(count2);
                                          if(!(iuu.name).equals( actor3.name))
                                                     iuu.data++;
             Set entries = map1.entrySet();
             Iterator itr = entries.iterator();
                 List x2 = new ArrayList() ;
                 Actor big = new Actor();
                 big.data = 0;
                 List list = new ArrayList();
             while (itr.hasNext())
                       Map.Entry thisPair = (Map.Entry) itr.next();                 
                          Actor actorCompare = ((Actor)thisPair.getKey());                                   
                          if( actorCompare.data > big.data)
                               big.name = actorCompare.name;
                               big.data = actorCompare.data;
                               list = new ArrayList();
                               list.add(actorCompare);
                      else if (actorCompare.data == big.data)
                                list.add(actorCompare);
          }//end of if, if actor is in map
           else
                   okactor = 1;
    *Prints the final output
    *@param String actor1 is the actor pick by the user to be search
    *@param List most is the list with all the actors/actresses that had
    *the most shared movies
      public void print (String actor1 , List most)
         if(okactor == 0)
               Actor actorPrint = new Actor();
               actorPrint.name = actor1;
               Actor y = new Actor();
               y = actorPrint;
               List  list = new ArrayList();
               list = most;
               int data = ((Actor)list.get(0)).data;
               ArrayList list2 = new ArrayList();
               list2 = (ArrayList)(map1.get(actorPrint));
                  for(int getActor = 0 ; getActor < list.size() ;getActor++)
                           System.out.println(list.get(getActor) + "  :   (" +  data  + "  " + "Shared roles)");
                            Actor name3  = (Actor)list.get(getActor);
                           String na  = name3.name;
                             Map map3 = new HashMap();
                            ArrayList ji = new ArrayList ();
                            ji = (ArrayList)map1.get(list.get(getActor));
                    for (int array1 = 0 ; array1 < ji.size()  ; array1++)
                         map3.put( ji.get(array1) , na);
                    for(int count = 0 ; count < list2.size() ; count++)
                           if(map3.containsKey(list2.get(count)))
                           System.out.println("                    " + (list2.get(count))); 
             Set entries =map1.entrySet();
             Iterator itr = entries.iterator();
             Actor  actortoclean = new Actor();
                  while(itr.hasNext())
                       Map.Entry thisPair = (Map.Entry)itr.next();
                       actortoclean = (Actor)thisPair.getKey();     
                       actortoclean.data = 0 ;      
       else  //else if okactor greater than 0
       System.out.println("THE ACTOR IS NOT IN FILE PLEASE TRY AGAIN") ;
    * Coputes what actors or actresses have the most shared movies
    *return a List with all the actor that have the most shared
    *movies
      public List mostSharedMovies( )
        if(okactor == 0)
        Set entries = map1.entrySet();
        Iterator itr = entries.iterator();
        List x = new ArrayList() ;
        Actor big = new Actor();
        big.data = 0;
        List list = new ArrayList();
          while (itr.hasNext())
                  Map.Entry thisPair = (Map.Entry) itr.next();
                     Actor o1 = ((Actor)thisPair.getKey());
                          if( o1.data > big.data)
                               big.name = o1.name;
                               big.data = o1.data;                 
                               list = new ArrayList();
                               list.add(o1);
                           else if (o1.data == big.data)
                                list.add(o1);
        return list;
      else
         return null;
    *Gives the amount of actor in the map of actors
    *return an int with the quantity
      public int getActorCount( )
          return map1.size();
    *Gives the amount of movies in the map of movies
    *return an int with the quantity
      public int getMovieCount()
           return map2.size();
    }Kevin Bacon Game
    For a description of the Kevin Bacon game, follow this link http://www.cs.virginia.edu/oracle/ . Try the game a few times and see if you can find someone with a Bacon Number higher than 3. In this program you will find all persons with a Bacon Number of 8 or higher. One of these persons is a former President of the United States.
    Strategy
    This is basically a shortest path problem. After that is done, find the large Bacon numbers by scanning the bacon numbers and print out the high-numbered actors and their chains. To print out a high-numbered actor, you should use recursion. Specifically, if some actor x has a Bacon number of b, then you know that they must have been in a movie with someone, call them actor y with a Bacon number of b-1. To print out x's chain, you would print out y's chain (recursively) and then the movie that x and y had in common.
    The Input Files
    There are two data files; both have identical formats. These files are: actors file and actresses file. These files are both compressed in .gz format, and were obtained from the Internet Movie Database. Combined, they are 52 Mbytes (compressed!) and were last updated October 17, 2002. These files are available at ftp://ftp.imdb.com/pub/interfaces/
    These datafiles contain approximately 571,000 actors/actresses in a total of 192,000 movies, with 2,144,000 roles. These files also list TV roles, but you must not include TV roles in your analysis.
    Before you run on the large data sets, use the small (uncompressed) file sample.list(http://www.fiu.edu/~lmore004/cop3530/sample.list) to debug the basic algorithms. In this data file, there are six actors, named a, b, c, d, e, and f, who have been in movies such as X, Y, and Z.
    Input File Hints
    Since it is not my input file, I cannot answer questions about it. Here are some observations that I used in my program, that should suffice. You can read the input file line by line by wrapping a FileInputStream inside a BufferedInputStream inside a GZIPInputStream inside an InputStreamReader inside a BufferedReader. You may not uncompress the file outside of your program.
    There are over 200 lines of preamble that can be skipped. This varies from file to file. However, you can figure it out by skipping all lines until the first occurrence of a line that begins with "Name", and then skipping one more.
    There are many postamble lines, too, starting with a line that has at least nine dashes (i.e. ---------).
    A name is listed once; all roles are together; the name starts in the first column.
    A movie title follows the optional name and a few tab stops ('\t'). There are some messed up entries that have spaces in addition to tab stops.
    The year should be part of the movie title.
    Movies made in 2003 or later should be skipped.
    A TV movie, indicated by (TV) following the year, is to be skipped.
    Archive material, indicated by (archive footage), is to be skipped. (Otherwise JFK is a movie star).
    Cameo appearances, indicated by [Cameo appearance], should be skipped.
    A TV series, indicated by a leading " in the title is to be skipped.
    A video-only movie, indicated by (V) following the year is allowed.
    Blank lines separate actors/actresses, and should be skipped.
    Strategy
    In order to compute your answers, you will need to store the data that you read. The main data structures are a Map in which each key is an Actor and each value is the corresponding list of movies that the actor has been in, and then a second Map, in which key is a movie and each value is the list of Actors in the movie (i.e. the cast). A movie is represented simply as a String that includes the year in which it was made, but an Actor includes both the name of the actor, and a data field that you can use to store computed information later on. Thus, ideally, you would like to define a class that looks somewhat like this (with routines to compute Bacon Numbers not listed):
    public class Database
      private static final class Actor
         String name;
         int    data;  // Bacon number ,
                       // determined by computeBaconNumbers
         public String toString( )
           { return name; }
         public int hashCode( )
           { return name.hashCode( ); }
         public boolean equals( Object other )
           { return (other instanceof Actor) &&
                    ( (Actor) other ).name.equals( name ); }
        // Open fileName; update the maps
      public void loadFile( String fileName ) throws IOException
      public int getActorCount( )
      public int getMovieCount( )
      private Map actorsToMovies = new HashMap( );
      private Map moviesToActors = new HashMap( );
      Memory Details
    The description above is pretty much what you have to do, except that you must take extra steps to avoid running out of memory.
    First, you will need to increase the maximum size of the Java Virtual Machine from the default of 64Meg to 224Meg. You may not increase it any higher than that. If you are running the java interpreter from the command line, the magic option is -Xmx224m. If you are using an IDE, you will have to consult their documentation --- don't ask me.
    Second, you will quickly run out of memory, because if you find two movies that are the same, but are on different input lines, the default setup will create two separate (yet equal) String objects and place them in the value lists of two different actors. Since there are 2.1 million roles, but only 192,000 movies, this means that you will have ten times as many String objects as you really need. What you need to do is to make sure that each movie title is represented by a single String object, and that the maps simply store references to that single String object. There are two basic alternatives:
    The String class has a method call intern. If you invoke it, the return value on equal Strings will always reference the same internal String object.
    You can keep a HashMap in which each key is a movie title, and each value is the same as the key. When you need a movie title, you use the value in the HashMap.
    Option two is superior (performancewise) to option #1 and it is required that you use it to avoid memory problems.
    When you maintain the list of movies for each actor, you will want to use an ArrayList. It takes little effort to ensure that the capacity in the ArrayList is not more than is needed, and you should do so, to avoid wasting space (since there are 571,000 such array lists).
    When you construct the HashMaps, you can issue a parameter (the load factor). The higher the load factor, the less space you use (at the expense of a small increase in time). You should play around with that too; the default is 0.75; you will probably want a load factor of 2.00 or 3.00.
    You must be very careful to avoid doing any more work in the inner loops than you need to, including creating excessive objects. IF YOU CREATE EXCESSIVE OBJECTS, YOUR PROGRAM MAY SLOW TO A CRAWL BECAUSE ALL ITS TIME WILL BE SPENT IN THE GARBAGE COLLECTOR OR RUN OUT OF MEMORY COMPLETELY.
    What to Submit
    Submit complete source code and the actors/actresses with Bacon Numbers of 8 or higher. Include the complete paths for each of the actors/actresses (with shared movie titles). Also indicate how long your algorithm takes. This means how long it takes to load, and also how long it takes to run the shortest path computation (not including the output of the answer), by inserting calls to System.currentTimeMillis at appropriate points in your code, and tell me how many actors and movies there are. Also, insert this code (at the end of your program) that tells me how large the VM is:
    Runtime rt = Runtime.getRuntime( );
    int vmsize = (int) rt.totalMemory( );
    System.out.println( "Virtual machine size: " + vmsize );
    Don't forget to write in the processor speed of the computer you are using. If it's somewhat fast, or provably space-efficient, you can get extra credit. You cannot receive credit for a working program if your program fails to produce a large set of actors and actresses with Bacon Numbers of 8 or higher. Note: the data you will work on and the data the Oracle uses (and the IMDB data) are all slightly out of sync. So you might not be able to exactly reproduce the results, although I was able to get a complete set of Bacon Numbers 8 and higher when I ran my program on October 23, using the Oct 17 files.
    Due Date
    This program is due on Thursday November 14.
    Additional Notes
    The exact sizes of the data files are 36381624 and 18263563 bytes, respectively. If you download and the files are larger, then you messed up the download. Note that if you are using Windows XP, these files might be uncompressed during downloading. If so, you can use this program to recompress the file. If the files are smaller, then the download probably got interrupted before it finished and you will need to retry. Here is a gzipped sample.list for you to test that aspect of your program.
    Running on COTTON in the AUL, which is a 450 MHz Pentium III, and accessing the files over the network as "\\\\couger\\cop3530\\actors.list.gz", (and similarly for actresses.list.gz), and with no other processes running besides notepad, the data files loaded in 180 seconds. You should be able to get faster results on a faster machine. Some of the AUL machines are 1.6 GHz. You should indicate which AUL machine (with processor speed) ran your submission.
    Entries with years such as (1996/I) are optional.
    When writing and reading make sure you are using BufferedInputStream and BufferedOutputStream, as appropriate.
    Sketch of the basic shortest path computation:
    // typically invoked with Kevin Bacon as parameter
    // This is the basic algorithm; there's stuff

    I forgot to post the code, here it is:
    import java.util.LinkedList ;
    import java.io.*;
    import java.util.zip.*;
    import java.util.ArrayList;
    import java.util.Map;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Set;
    import java.util.Iterator;
    import java.util.HashSet;
    * A class that download files , create Maps and search for information with
    public class DataBase2 implements Serializable
      private Map map1 = new HashMap((int)515927, (float)0.85 );  // actor
      private Map map2= new HashMap((int)172911, (float)0.85 );   //movies
      transient private Map map3 = new HashMap();   //movie and movie
      transient private int okactor = 0;
      transient static final int INFINITY = Integer.MAX_VALUE;
    // Main Method
      public static void main (String args [])throws IOException
        int c  = 0 ;
        System.out.println("Program was run in Pentium 4 in AUL");        
        DataBase2 testing = new DataBase2();   
        try{   
            ObjectInputStream ii1 = new ObjectInputStream (new BufferedInputStream (new FileInputStream("file2.ser")));
        catch (FileNotFoundException ex)
            System.out.println("FILE NOT ON DISK PLEASE WAIT WHILE DOWNLOADING");
            long x = System.currentTimeMillis();
            testing.loadFile("\\\\Cougar\\cop3530\\actresses.list.gz");   
            testing.loadFile("\\\\Cougar\\cop3530\\actors.list.gz");
            long y = System.currentTimeMillis();
            System.out.println("DONE WITH DOWNLOADING, USING NORMAL METHOD " +(y - x)/1000 + " seconds");                       
            System.out.println("The actors count is:  " + testing.getActorCount());
            System.out.println("The movies count is:  "  + testing.getMovieCount());
            testing.loadser(testing);      
            System.out.println("END OF DUMPING");      
            testing.findBacon();  
            c++;        
        if (c == 0 )
            long o= System.currentTimeMillis();   
            testing = testing.fastloading(testing);
            long y = System.currentTimeMillis(); 
            System.out.println("DONE WITH LOADING, FROM SERIALIZED FILES  " + (y-o)/1000 + "seconds");         
            System.out.println("The actors count is:   " + testing.getActorCount());
            System.out.println("The movies count is:   " + testing.getMovieCount());
            testing.findBacon();             
            Runtime rt = Runtime.getRuntime( );       
            int vmsize = (int) rt.totalMemory( );       
            System.out.println(" " );
            System.out.println( "The Virtual Machine size is : " + vmsize + " bytes" );
    //static class actor 
      private static final class Actor implements Serializable
         String name;
         int    data;  // number of shared movies,
                       // determined by computeSharedMovies          
         public String toString( )
           { return name; }
         public int hashCode( )
           { return name.hashCode( ); }         
         public boolean equals( Object other )
           { return (other instanceof Actor) && ( (Actor) other ).name.equals( name );}
    *Method to find the bacon number of each actor
    *and also send information, actors greater than 7,  to be print
      public void findBacon()
        ArrayList actorlist = new ArrayList();
        long time1 = System.currentTimeMillis();
        Actor actor2 = new Actor();    
        actor2.name = "Bacon, Kevin";
        actor2.data = 0;
        Set entries =map1.entrySet();
        Iterator itr = entries.iterator();
        Actor  actortoInfinity = new Actor();
        Set listofMovies = new HashSet();          
                    while(itr.hasNext())
                            Map.Entry thisPair = (Map.Entry)itr.next();
                            actortoInfinity = (Actor)thisPair.getKey();    
                            if((actortoInfinity.name).equals( actor2.name))
                                    actortoInfinity.data = 0 ;                     
                            else
                            actortoInfinity.data = INFINITY ;      
         Actor actor3 = new Actor() ;      
         LinkedList list = new LinkedList();
         list.addLast(actor2) ;
         Actor out = new Actor();
                    while (list.isEmpty() != true)
                            out = (Actor)list.getFirst();
                        list.removeFirst() ;
                                    for(int count = 0 ; count < ((ArrayList)(map1.get(out))).size() ; count++)
                                            String movie = (String)((ArrayList)(map1.get(out))).get(count);                      
                            if(listofMovies.contains(movie))
                            {continue;}
                            else
                            listofMovies.add(movie);
                                    for(int count2 = 0; count2 < ((ArrayList)(map2.get(movie))).size() ; count2++)
                                                    actor3  =   (Actor)(((ArrayList)(map2.get(movie))).get(count2) )  ;
                                            if(actor3.data == INFINITY)
                                                actor3.data = out.data + 1;
                                                list.addLast(actor3) ;
                                    if(actor3.data >= 7)
                                            actorlist.add(actor3);                                                                 
                                                             }//inner loop                
                         }//else
                     }//outer loop
                 }//while loop
         long time2 = System.currentTimeMillis();
         System.out.println("Done gettig Bacon Number(shortest path): " + (time2 - time1)/1000 + " Seconds");
                    for(int count = 0 ; count < actorlist.size() ; count++)
                                    print((Actor)(actorlist.get(count)));
    *Method used to print the chain of information within
    *each actor with Bacon number of 7 and over
    *it uses recursion to do it
      private void   printPath (Actor target)
        int c = 0 ;  
        Actor actor = new Actor();
            String movies ;
              if (target.data == 0)
                  System.out.println("-----------------------------END OF PATH-----------------------------");                           
              else
                    for(int x = 0 ; x < ((ArrayList)(map1.get(target))).size(); x++)
                    movies = (String)(((ArrayList)(map1.get(target))).get(x));
                    for (int y = 0 ; y < ((ArrayList)map2.get(movies)).size() ;  y++)
                            actor = (Actor)(((ArrayList)(map2.get(movies))).get(y));
                            if(actor.data == target.data - 1)
                                    System.out.println("* " + target + "  acted with " + actor+ " how's BK # is " + actor.data + ", both in movie: " + movies ) ;
                                c++;
                                break;                      
                     }//inner loop
                   if (c > 0)
                   break;
                  }//outer loop
              printPath(actor);
    *Gets the actor to print
    *and sends the same actor to
    *PrintInfo method to print
    *its chain
    *@param target the actor to print
      public void print(Actor target)
                            System.out.println(" " );
                                    System.out.println(" " ); 
                            System.out.println(" " );
                                    System.out.println(target.name + "'s Bacon number is: " +target.data);
                                    System.out.println(" " );
                                printPath(target);                                                                                                                                                                         
    *A method to load the Serialization file
    *so it,the file,  can be manipulated
    *@param x the DataBase object to be load
    *with all the files
    *@return the object x with all the file
    *withit
      public DataBase2 fastloading(DataBase2  target2) throws IOException
            try{ 
                    ObjectInputStream ii1 = new ObjectInputStream (new BufferedInputStream (new FileInputStream("file2.ser")));
                    target2= (DataBase2) ii1.readObject();
                    ii1.close();
        catch(ClassNotFoundException e )
           System.out.println("Error, class exception");
        catch(FileNotFoundException ex)
           System.out.println("Error, the file is not on the disk");       
        return target2;            
    *Method to write the Object DataBase2, created before, into a Serializable file
      public void loadser(DataBase2 ObjecttoLoad ) throws IOException
            ObjectOutputStream oo = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("file2.ser")));
            oo.writeObject(ObjecttoLoad);
            oo.close();
    /**Method use to download files for the first time
    *it creates maps, which contains actor and movies
    *@param fileName it gets the file to be read and
    *used to get the data into the maps
      public void loadFile( String fileName ) throws IOException
          BufferedReader x = new BufferedReader ( new InputStreamReader(new GZIPInputStream (new BufferedInputStream( new FileInputStream(fileName)))));
          String line;          
          int start = 0 ;    
          ArrayList actorList = new ArrayList();
          ArrayList movies = new ArrayList();
          Actor key = new Actor();
          int p = 0;    //parameters
          int p2 =0 ;
          String you = null ;
          String year = null;
          String trimMovie = null;
          int par1 = 0;    //parameter
          int par2 =0;
          String addingmovie = null;
            while((line = x.readLine()) != null)
                if(line.indexOf("Name") == 0 )
                    start++;                       
                if(start == 0)
                continue;                       
                if( start >= 1)
                                  if(line.indexOf("-----------------------") == 0)
                                         break;                    
                                  if(((line.trim()).length()) == 0)
                                     continue;
                                  else if(line.indexOf("----") == 0)
                                     continue;
                                      else if (line.indexOf("Name") == 0)
                                             continue;
                                  else if(line.indexOf("\t") != 0)
                                     p  = line.indexOf("\t");
                                     p2 = line.lastIndexOf(")");                               
                                     String actor = (line.substring(0,p));                                        
                                             key = new Actor();
                                             key.name = actor;                               
                                             you = (line.substring(p, (p2 + 1)));                                                                                                                                                                                                                                                                              
                                             if (you.indexOf("(TV)") > 0)
                                                            continue;                                                                                              
                                     p = you.indexOf("\t");
                                     p2 = you.indexOf(")");
                                         you = (you.substring(p, p2 +1)).trim();                                    
                                          if(you.indexOf("\"") == 0)
                                                             continue;                      
                                     year = you ;      
                                     p = year.indexOf("(");
                                     p2 = year.indexOf(")");
                                     year = year.substring(p + 1 , p2);                                 
                                           if ( ( ((Comparable)year).compareTo("2002") ) >= 0)
                                                  continue;                                           
                                           if (map3.containsKey(you))
                                               else
                                                          map3.put(you, you);                                                                                              
                                     movies = new ArrayList();
                                     movies.add(map3.get(you));
                                     movies.trimToSize() ;                         
                                     map1.put(key , movies);
                                          if(map2.containsKey(map3.get(you)))
                                                              ((ArrayList)map2.get(map3.get(you))).add(key) ;
                                          else
                                                              actorList = new ArrayList();
                                                                          actorList.add(key);
                                                                      actorList.trimToSize() ;                                                                     
                                                                      map2.put(map3.get(you), actorList);
                             else if(line.indexOf("\t") == 0)
                                    par1 = line.indexOf(")");
                                    par2 = line.indexOf("\t");                                                          
                                    trimMovie = (line.substring(par2, par1 +1)).trim();
                                    // trimMovie = trimMovie.intern();                           
                                    if(map3.containsKey(trimMovie))
                                    else
                                    map3.put(trimMovie , trimMovie);
                                    String ye = (String)map3.get(trimMovie);
                                    par1 = trimMovie.indexOf("(");
                                    par2 = trimMovie .indexOf(")");                             
                                    ye = (ye.substring(par1 + 1 , par2));                                                               
                                    addingmovie = (line.trim());
                                        if(addingmovie.indexOf("(TV)") > 0)
                                            else if ( (((Comparable)ye).compareTo("2002")) >= 0)
                                            else  if(addingmovie.indexOf("\"") == 0)
                                            else if(addingmovie.indexOf("(archive footage)") > 0)
                                        else
                                            if(map1.containsKey(key))
                                                            ((ArrayList)map1.get(key)).add(map3.get(trimMovie));                            
                                                            ((ArrayList)map1.get(key)).trimToSize() ;
                                            else
                                                    movies = new ArrayList();
                                                    movies.add(map3.get(trimMovie));
                                                    movies.trimToSize() ;
                                                    map1.put(key, movies);
                                           if(map2.containsKey(trimMovie))
                                                {   ((ArrayList)map2.get(map3.get(trimMovie))).add(key);
                                                    ((ArrayList)map2.get(map3.get(trimMovie))).trimToSize() ;
                                               else
                                                            actorList = new ArrayList();
                                                                    actorList.add(key);
                                                            actorList.trimToSize() ;
                                                            map2.put(map3.get(trimMovie), actorList);
                                      }     //end of last else if          
                        }//end of if
                }//end of while
        }//end of method
    *Gives the amount of actor in the map of actors
    *return an int with the quantity
      public int getActorCount( )    
          return map1.size();
    *Gives the amount of movies in the map of movies
    *return an int with the quantity
      public int getMovieCount()
           return map2.size();
    }//end of DataBase2 class

  • Urgent Help needed in loggin to Workflow designer

    Hi there,
    I have a written a program from which a workflow get triggered automatically. The programs runs file in my machine. When i deploy it in my server machine it doesn't work. The server machine has a sandbox installed. But my machine doesn't have a sandbox. I have installed all tools separately in my machine.
    When i run my application in the server machine the following error comes:
    java.lang.reflect.UndeclaredThrowableException
    at $Proxy1.login(Unknown Source)
    at com.adobe.workflow.client.QLCSessionImpl.login(QLCSessionImpl.java:11
    6)
    at TriggerWorkflow.main(TriggerWorkflow.java:50)
    Caused by: java.io.InvalidObjectException: inauthentic principal assertion
    at com.adobe.idp.Context.getValidatedAuthResultFromAssertion(Unknown Sou
    rce)
    at com.adobe.idp.Context.readResolve(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
    java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
    sorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:324)
    at java.io.ObjectStreamClass.invokeReadResolve(ObjectStreamClass.java:92
    5)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1
    655)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)
    at java.rmi.MarshalledObject.get(MarshalledObject.java:135)
    at org.jboss.invocation.jrmp.interfaces.JRMPInvokerProxy.invoke(JRMPInvo
    kerProxy.java:136)
    at org.jboss.invocation.MarshallingInvokerInterceptor.invoke(Marshalling
    InvokerInterceptor.java:67)
    at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.
    java:46)
    at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:5
    3)
    at org.jboss.proxy.ejb.StatelessSessionInterceptor.invoke(StatelessSessi
    onInterceptor.java:100)
    at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:85)
    ... 3 more
    com.adobe.workflow.client.QLCException: Login failed, or you do not have permiss
    ions to login to this application
    at com.adobe.workflow.client.QLCSessionImpl.login(QLCSessionImpl.java:12
    6)
    at TriggerWorkflow.main(TriggerWorkflow.java:50)
    I am seriously bugged by this error. I am giving the correct user name and password but still the error comes. I dont know how to solve this. This might be some small settings change. But i am not sure. Also when i try to connect the workflow designer through Eclispe in that server machine, even there the login failure message still comes.
    Can anyone please advise on this as it is very urgent.
    Suraj

    Hi Suraj
    Since you're getting this with Workflow Designer as well as your code, it doesn't look like it's anything with your code.
    It looks very much to me like you're specifying an invalid username and/or password.
    - Can you log into fm or adminui using the same username and password?
    - Can you log in to either Workflow Designer or your custom application using a different username and password?
    - Does your username or password contain non-USAscii characters?
    One thing I have seen is where there is a user in LDAP whose login name is "administrator". This can conflict with the LiveCycle local "administrator" account, and prevent you from logging in.
    I hope this is of some help...
    Howard
    http://www.avoka.com

  • Help needed in getting clob

    Hi all
    iam using oracle9i and i changing our applications from mysql to oracle .
    this is my java for mysql
    ObjectInputStream in =
                                  new ObjectInputStream(
                                  rs.getBinaryStream("filterObject"));
    but now for oracle i have to change the data type of filterObject to clob and bcoz of this i am getting null pointer exception. I have converted the clob type to string
    by
    String str=rs.getClob("filterObject").getSubString(1,(int)(rs.getClob("filterObject").length()));
    but still iam not able to convert into binary stream type
    So can any one help me in fixing this problem
    Thanking you in advance
    dinny

    Check out the O'Reilly book "Java Programming with Oracle JDBC," by Donald Bales. I also saw promising entries on asktom.oracle.com when I searched for jdbc and lob.
    Good luck.

  • Problems with async callback with the BPEL Java API (Urgent- pls help)

    Hi,
    I have an async BPEL process and I invoke it form a JSP page using BPEL java API.
    I have followed the tutorials and docs at:
    $SOA_HOME/bpel\samples\tutorials\102.InvokingProcesses\rmi\com\otn\samples\async
    I can inititiate successfully the process, but when I try to get the result using getResult() or getField(String fieldName) methods I get the error:
    Oct 2, 2007 2:35:16 PM oracle.j2ee.rmi.RMIMessages EXCEPTION_ORIGINATES_FROM_THE_REMOTE_SERVER
    WARNING: Exception returned by remote server: {0}
    java.lang.ExceptionInInitializerError
         at java.lang.Class.forName0(Native Method)
         at java.lang.Class.forName(Class.java:242)
         at com.evermind.io.ClassLoaderObjectInputStream.resolveClass(ClassLoaderObjectInputStream.java:33)
         at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1538)
         at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1460)
         at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1693)
         at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
         at java.io.ObjectInputStream.readObject(ObjectInputStream.java:339)
         at com.evermind.server.rmi.RMIClientConnection.handleMethodInvocationResponse(RMIClientConnection.java:856)
         at com.evermind.server.rmi.RMIClientConnection.handleOrmiCommandResponse(RMIClientConnection.java:287)
         at com.evermind.server.rmi.RMIClientConnection.dispatchResponse(RMIClientConnection.java:242)
         at com.evermind.server.rmi.RMIClientConnection.processReceivedCommand(RMIClientConnection.java:224)
         at com.evermind.server.rmi.RMIConnection.handleCommand(RMIConnection.java:152)
         at com.evermind.server.rmi.RMIConnection.listenForOrmiCommands(RMIConnection.java:127)
         at com.evermind.server.rmi.RMIConnection.run(RMIConnection.java:107)
         at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:298)
         at java.lang.Thread.run(Thread.java:595)
    Caused by: java.util.MissingResourceException: Can't find bundle for base name com.collaxa.cube.i18n.exception_cube, locale en_US
         at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:836)
         at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:805)
         at java.util.ResourceBundle.getBundle(ResourceBundle.java:699)
         at com.collaxa.cube.CubeException.getResourceBundle(CubeException.java:142)
         at com.collaxa.cube.CubeException.<clinit>(CubeException.java:82)
         ... 17 more
    07/10/02 14:35:16 java.lang.ClassCastException: java.util.MissingResourceException
    07/10/02 14:35:16      at com.oracle.bpel.client.delivery.ext.async.thread.AsyncInstanceWatchdog.run(AsyncInstanceWatchdog.java:152)
    I check for the result only after I have checked that the instance is closed (completed or faulted) by using IInstanceHandle:getState() and InstanceHandle.STATE_CLOSED_COMPLETED, or IInstanceHandle.STATE_CLOSED_FAULTED
    I would like to add that so far I had no problems with invocation and geting result of sync BPEL processes. I do not what is missing for async processes.
    Any kind of help is appreciable.
    Thanks and best regards,
    Evanela

    Hi again,
    i managed to solve the problem:) Totally stupid.. the process variable name was not specified correctly..., but more stupid sounds the error message:))))
    Best Regards,
    Evanela

  • Production issue; Please HELP !!! ...weired error while starting WLS8.1 server

    Hi All/Rob,
    Iam running WLS8.1+SP2 and i have 4 clusters each of these clusters contains 4
    managed servers.
    Now, iam getting a weired error when starting each of the instances ......this
    is the Exception that iam getting:
    PLEASE HELP AS THIS IS OUR PRODUCTION ISSUES ........
    <Feb 25, 2004 11:42:29 AM EST> <Notice> <Security> <BEA-090082> <Security initializing
    using security realm myrealm.>
    <Feb 25, 2004 11:42:30 AM EST> <Notice> <WebLogicServer> <BEA-000328> <Starting
    WebLogic Managed Server "rsa_nova1t_s1" for domain "Mah-sub">
    Failed setting Group
    <Feb 25, 2004 11:42:39 AM EST> <Error> <Security> <BEA-090031> <Failed to Switch
    to Group rsaadmin.>
    Failed setting user
    <Feb 25, 2004 11:42:39 AM EST> <Error> <Security> <BEA-090033> <Failed to Switch
    to User rsaadmin.>
    <Feb 25, 2004 11:42:39 AM EST> <Notice> <Cluster> <BEA-000138> <Listening for
    announcements from cluster RSA on 237.0.3.11:8001.>
    <Feb 25, 2004 11:42:39 AM EST> <Notice> <Cluster> <BEA-000133> <Waiting to synchronize
    with other running members of RSA.>
    <Feb 25, 2004 11:43:21 AM EST> <Warning> <HTTP> <BEA-101247> <admingui.war: Public
    ID references the old version of the Servlet DTD. You must change the public ID
    in web.xml file to "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN".>
    <Feb 25, 2004 11:47:33 AM EST> <Notice> <WebLogicServer> <BEA-000355> <Thread
    "ListenThread.Default" listening on port 8020, ip address 153.2.252.189>
    <Feb 25, 2004 11:47:33 AM EST> <Notice> <Cluster> <BEA-000102> <Joining cluster
    RSA on 237.0.3.11:8001>
    <Feb 25, 2004 11:47:33 AM EST> <Notice> <WebLogicServer> <BEA-000330> <Started
    WebLogic Managed Server "rsa_nova1t_s1" for domain "Mah-sub" running in Production
    Mode>
    <Feb 25, 2004 11:47:33 AM EST> <Notice> <WebLogicServer> <BEA-000360> <Server
    started in RUNNING mode>
    <Feb 25, 2004 12:02:23 PM EST> <Error> <Cluster> <BEA-000110> <Multicast socket
    receive error: java.io.StreamCorruptedException
    java.io.StreamCorruptedException
    at java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(ObjectInputStream.java:2350)
    at java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStream.java:2383)
    at java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream.java:2455)
    at java.io.DataInputStream.readInt(DataInputStream.java:392)
    at java.io.ObjectInputStream$BlockDataInputStream.readInt(ObjectInputStream.java:2660)
    at java.io.ObjectInputStream.readInt(ObjectInputStream.java:900)
    at weblogic.cluster.MulticastManager.execute(MulticastManager.java:379)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
    >
    <Feb 25, 2004 12:03:38 PM EST> <Error> <Cluster> <BEA-000110> <Multicast socket
    receive error: java.io.StreamCorruptedException
    java.io.StreamCorruptedException
    at java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(ObjectInputStream.java:2350)
    at java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStream.java:2383)
    at java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream.java:2455)
    at java.io.DataInputStream.readInt(DataInputStream.java:392)
    at java.io.ObjectInputStream$BlockDataInputStream.readInt(ObjectInputStream.java:2660)
    at java.io.ObjectInputStream.readInt(ObjectInputStream.java:900)
    at weblogic.cluster.MulticastManager.execute(MulticastManager.java:379)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
    >
    <Feb 25, 2004 12:09:11 PM EST> <Error> <Cluster> <BEA-000139> <There are two clusters
    in the network that are possibly running different versions of WebLogic Server.
    These two clusters probably name the same RSA and they are using same address
    237.0.3.11 and port 8001.>
    <Feb 25, 2004 12:09:37 PM EST> <Error> <Cluster> <BEA-000110> <Multicast socket
    receive error: java.io.StreamCorruptedException
    java.io.StreamCorruptedException
    at java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(ObjectInputStream.java:2350)
    at java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStream.java:2383)
    at java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream.java:2455)
    at java.io.DataInputStream.readInt(DataInputStream.java:392)
    at java.io.ObjectInputStream$BlockDataInputStream.readInt(ObjectInputStream.java:2660)
    at java.io.ObjectInputStream.readInt(ObjectInputStream.java:900)
    at weblogic.cluster.MulticastManager.execute(MulticastManager.java:379)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
    >
    <Feb 25, 2004 12:09:59 PM EST> <Error> <Cluster> <BEA-000139> <There are two clusters
    in the network that are possibly running different versions of WebLogic Server.
    These two clusters probably name the same RSA and they are using same address
    237.0.3.11 and port 8001.>
    <Feb 25, 2004 12:10:09 PM EST> <Error> <Cluster> <BEA-000110> <Multicast socket
    receive error: java.io.StreamCorruptedException
    java.io.StreamCorruptedException
    at java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(ObjectInputStream.java:2350)
    at java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStream.java:2383)
    at java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream.java:2455)
    at java.io.DataInputStream.readInt(DataInputStream.java:392)
    at java.io.ObjectInputStream$BlockDataInputStream.readInt(ObjectInputStream.java:2660)
    at java.io.ObjectInputStream.readInt(ObjectInputStream.java:900)
    at weblogic.cluster.MulticastManager.execute(MulticastManager.java:379)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
    >
    <Feb 25, 2004 12:12:43 PM EST> <Error> <Cluster> <BEA-000139> <There are two clusters
    in the network that are possibly running different versions of WebLogic Server.
    These two clusters probably name the same RSA and they are using same address
    237.0.3.11 and port 8001.>
    <Feb 25, 2004 12:13:31 PM EST> <Error> <Cluster> <BEA-000139> <There are two clusters
    in the network that are possibly running different versions of WebLogic Server.
    These two clusters probably name the same RSA and they are using same address
    237.0.3.11 and port 8001.>

    Rob,
    Each cluster uses UNIQUE IP address ......but here is the information that iam
    getting .....if that is in any way related to this problem ....i ran this command
    bash-2.03# java -cp /xx/bea/weblogic81/server/lib/weblogic.jar utils.MulticastTest
    -A 237.0.3.11
    ***** WARNING ***** WARNING ***** WARNING *****
    Do NOT use the same multicast address as a running WLS cluster.
    Starting test. Hit any key to abort
    Using multicast address 237.0.3.11:7001
    Will send messages under the name 1077733276 every 2 seconds
    Will print warning every 600 seconds if no messages are received
    I (1077733276) sent message num 1
    I (1077733276) sent message num 2
    Received message 2 from 1077733276
    I (1077733276) sent message num 3
    Received message 3 from 1077733276
    I (1077733276) sent message num 4
    Received message 4 from 1077733276
    I (1077733276) sent message num 5
    Received message 5 from 1077733276
    I (1077733276) sent message num 6
    Received message 6 from 1077733276
    I (1077733276) sent message num 7
    Received message 7 from 1077733276
    Rob Woollen <[email protected]> wrote:
    First thing to check is that each cluster has its own multicast address.
    It looks like the server is complaining that multiple clusters are using
    237.0.3.11 and port 8001
    -- Rob
    steve wrote:
    Hi All/Rob,
    Iam running WLS8.1+SP2 and i have 4 clusters each of these clusterscontains 4
    managed servers.
    Now, iam getting a weired error when starting each of the instances......this
    is the Exception that iam getting:
    PLEASE HELP AS THIS IS OUR PRODUCTION ISSUES ........
    <Feb 25, 2004 11:42:29 AM EST> <Notice> <Security> <BEA-090082> <Securityinitializing
    using security realm myrealm.>
    <Feb 25, 2004 11:42:30 AM EST> <Notice> <WebLogicServer> <BEA-000328><Starting
    WebLogic Managed Server "rsa_nova1t_s1" for domain "Mah-sub">
    Failed setting Group
    <Feb 25, 2004 11:42:39 AM EST> <Error> <Security> <BEA-090031> <Failedto Switch
    to Group rsaadmin.>
    Failed setting user
    <Feb 25, 2004 11:42:39 AM EST> <Error> <Security> <BEA-090033> <Failedto Switch
    to User rsaadmin.>
    <Feb 25, 2004 11:42:39 AM EST> <Notice> <Cluster> <BEA-000138> <Listeningfor
    announcements from cluster RSA on 237.0.3.11:8001.>
    <Feb 25, 2004 11:42:39 AM EST> <Notice> <Cluster> <BEA-000133> <Waitingto synchronize
    with other running members of RSA.>
    <Feb 25, 2004 11:43:21 AM EST> <Warning> <HTTP> <BEA-101247> <admingui.war:Public
    ID references the old version of the Servlet DTD. You must change thepublic ID
    in web.xml file to "-//Sun Microsystems, Inc.//DTD Web Application2.3//EN".>
    <Feb 25, 2004 11:47:33 AM EST> <Notice> <WebLogicServer> <BEA-000355><Thread
    "ListenThread.Default" listening on port 8020, ip address 153.2.252.189>
    <Feb 25, 2004 11:47:33 AM EST> <Notice> <Cluster> <BEA-000102> <Joiningcluster
    RSA on 237.0.3.11:8001>
    <Feb 25, 2004 11:47:33 AM EST> <Notice> <WebLogicServer> <BEA-000330><Started
    WebLogic Managed Server "rsa_nova1t_s1" for domain "Mah-sub" runningin Production
    Mode>
    <Feb 25, 2004 11:47:33 AM EST> <Notice> <WebLogicServer> <BEA-000360><Server
    started in RUNNING mode>
    <Feb 25, 2004 12:02:23 PM EST> <Error> <Cluster> <BEA-000110> <Multicastsocket
    receive error: java.io.StreamCorruptedException
    java.io.StreamCorruptedException
    at java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(ObjectInputStream.java:2350)
    at java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStream.java:2383)
    at java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream.java:2455)
    at java.io.DataInputStream.readInt(DataInputStream.java:392)
    at java.io.ObjectInputStream$BlockDataInputStream.readInt(ObjectInputStream.java:2660)
    at java.io.ObjectInputStream.readInt(ObjectInputStream.java:900)
    at weblogic.cluster.MulticastManager.execute(MulticastManager.java:379)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
    <Feb 25, 2004 12:03:38 PM EST> <Error> <Cluster> <BEA-000110> <Multicastsocket
    receive error: java.io.StreamCorruptedException
    java.io.StreamCorruptedException
    at java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(ObjectInputStream.java:2350)
    at java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStream.java:2383)
    at java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream.java:2455)
    at java.io.DataInputStream.readInt(DataInputStream.java:392)
    at java.io.ObjectInputStream$BlockDataInputStream.readInt(ObjectInputStream.java:2660)
    at java.io.ObjectInputStream.readInt(ObjectInputStream.java:900)
    at weblogic.cluster.MulticastManager.execute(MulticastManager.java:379)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
    <Feb 25, 2004 12:09:11 PM EST> <Error> <Cluster> <BEA-000139> <Thereare two clusters
    in the network that are possibly running different versions of WebLogicServer.
    These two clusters probably name the same RSA and they are using sameaddress
    237.0.3.11 and port 8001.>
    <Feb 25, 2004 12:09:37 PM EST> <Error> <Cluster> <BEA-000110> <Multicastsocket
    receive error: java.io.StreamCorruptedException
    java.io.StreamCorruptedException
    at java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(ObjectInputStream.java:2350)
    at java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStream.java:2383)
    at java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream.java:2455)
    at java.io.DataInputStream.readInt(DataInputStream.java:392)
    at java.io.ObjectInputStream$BlockDataInputStream.readInt(ObjectInputStream.java:2660)
    at java.io.ObjectInputStream.readInt(ObjectInputStream.java:900)
    at weblogic.cluster.MulticastManager.execute(MulticastManager.java:379)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
    <Feb 25, 2004 12:09:59 PM EST> <Error> <Cluster> <BEA-000139> <Thereare two clusters
    in the network that are possibly running different versions of WebLogicServer.
    These two clusters probably name the same RSA and they are using sameaddress
    237.0.3.11 and port 8001.>
    <Feb 25, 2004 12:10:09 PM EST> <Error> <Cluster> <BEA-000110> <Multicastsocket
    receive error: java.io.StreamCorruptedException
    java.io.StreamCorruptedException
    at java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(ObjectInputStream.java:2350)
    at java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStream.java:2383)
    at java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream.java:2455)
    at java.io.DataInputStream.readInt(DataInputStream.java:392)
    at java.io.ObjectInputStream$BlockDataInputStream.readInt(ObjectInputStream.java:2660)
    at java.io.ObjectInputStream.readInt(ObjectInputStream.java:900)
    at weblogic.cluster.MulticastManager.execute(MulticastManager.java:379)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
    <Feb 25, 2004 12:12:43 PM EST> <Error> <Cluster> <BEA-000139> <Thereare two clusters
    in the network that are possibly running different versions of WebLogicServer.
    These two clusters probably name the same RSA and they are using sameaddress
    237.0.3.11 and port 8001.>
    <Feb 25, 2004 12:13:31 PM EST> <Error> <Cluster> <BEA-000139> <Thereare two clusters
    in the network that are possibly running different versions of WebLogicServer.
    These two clusters probably name the same RSA and they are using sameaddress
    237.0.3.11 and port 8001.>

  • Server hangs up when tryin to read object Urgent Help Plz

    Hi,
    I've been working on a client-server model for a while, I've tested my applicaction a thousand of times locally (I mean, server and serveral clients running on the same machine) and it's ok, now I finally run server in a remote host and I find it rarely works fine, most of the times server hangs up when tryin to read objects I dont know why.
    this is the part of the server-code where the problem begins:
    public int EscucharSocket(){
            Socket cliente = null;
            System.out.println("Servidor en escucha...\n");
            while(true){
                try{
                    cliente = SocketS.accept();
                    //I get client's ip and port
                    String ip = cliente.getInetAddress().getHostAddress();
                    int puerto = cliente.getPort();
                    //After the conexion is made, server reads a signature to
                    //identify the client
                   //in function process I check if the signature is valid
                   //SignedData is a class where I wrap the signiture (obviously
                   //it implements Serializable interface
                   process((SignedData)le.LeerObject(cliente));
                   //Other things done here
                catch (Exception e) { }
    }le is a class I use to read,write data to the socket, this is the code of the LeerObject function
    public Object LeerObject(Socket c) throws Exception {
           //Here Is where the server hangs up
            ObjectInputStream b = new ObjectInputStream(c.getInputStream());
            return b.readObject();
    }As I wrote when running locally, there is no problem, but when I have a remote host, that happens
    Any help or idea?

    Hi again, thnx for your help
    I modified my LE class so I just create a couple of Input/Output Streams per client (on server n client program), this is now the complete code of the class:
    import java.net.*;
    import java.io.*;
    public class LE {
        DataOutputStream     dos;
        ObjectOutputStream  oos;
        DataInputStream        dis;
        ObjectInputStream     ois;
        //Streams are created just once in the constructor
        public LE (Socket s) throws Exception {
            dos = new DataOutputStream(s.getOutputStream());
             //I'm not sure if this flush has any sense
            dos.flush();
            oos = new ObjectOutputStream (s.getOutputStream());
            oos.flush();
            dis = new DataInputStream(s.getInputStream());
            ois = new ObjectInputStream (s.getInputStream());
        public void EscribirByte(byte datos[],int len) throws Exception {
            dos.write(datos,0,len);
            dos.flush();
        public void EscribirString(String dato) throws Exception {
            dos.writeUTF(dato);
            dos.flush();
        public void EscribirChar(char dato) throws Exception {
            dos.writeChar(dato);
            dos.flush();       
        public void EscribirInt(int dato) throws Exception {
            dos.writeInt(dato);
            dos.flush();
        public void EscribirLong(long dato) throws Exception {
            dos.writeLong(dato);
            dos.flush();
        public void EscribirObject(Object dato) throws Exception {
            oos.writeObject(dato);
            oos.flush();
        public String LeerString() throws Exception {       
            return dis.readUTF();
        public int LeerInt() throws Exception {       
            return dis.readInt();
        public char LeerChar() throws Exception {       
            return dis.readChar();
        public long LeerLong() throws Exception {       
            return dis.readLong();
        public Object LeerObject() throws Exception {       
            return ois.readObject();
    }part of code of server and client, where the conexion is made and the LE object is created
    Server:
    try{
           cliente = SocketS.accept();               
           //After accepting the conexion the LE object is created
            le = new LE(cliente);
            //I get client's ip and port
            String ip = cliente.getInetAddress().getHostAddress();
            int puerto = cliente.getPort();
            //Object wraping signature is read        
            process((SignedData)le.LeerObject());
            //other control operations doing here
            //A thread is created to receive requests from client
            //(reference to LE object is passed to the thread
           ConexionCliente c = new ConexionCliente (cliente,id_persona,id_grupo,tipo_usuario,backup,le);                               
            //thread is started
            c.start();
    catch (Exception e) {
        try {
            cliente.close();
        catch(Exception e2){}
    }Cliente code:
    try{
       //it connects to the server
       c=new Socket(host,puerto);
       //After accepting the conexion the LE object is created         
       le = new LE(c);
       //other things made here to genarate SignedData Object
      //It sends signed data object
      le.EscribirObject(Data);          
      //A thread is created and started to receive messages from server
      //reference to object LE is sent to the thread to avoid the need of
      //creating another
      new ConexionServidorClient(c,id_persona,ci,le).start();
      return 1;
    catch(Exception e) {
       return -1;
    }after the change, itworks a little better, but still most of the times server hangs up, I can't make server operational yet and I dont have any idea for solving this issue

Maybe you are looking for

  • Changing Stereo Recorded tracks to Mono - PLEASE HELP !

    I have just spent the whole weekending using my friend's equipment to record a selection of songs on Garage band 3. I had the input set to Stereo 1 & 2. This has only recorded my voice in the right speaker and added the effects in the left. I did not

  • ERROR 21 PLEASE HELP!!!

    I keep getting an error 21 on my itunes when i try to restore my iphone 5. my iphone 5 isnt functionable at all. i have updated everything, even un-installed and reinstalled itunes, NOTHING HAS WORKED! are they any suggestion?! thank you!

  • SAP MDM-XI-R/3 Scenario

    Hi, I'm working on MDM-XI-R/3 integration. The integration between R/3 and MDM has been done. First XI posts Idoc ADRMAS and then posts Idoc DEBMAS. We tried sending the data thrice. the first two times ADRMAS was getting posted to the application su

  • Help in OO

    Hi, i have this code and i have to use it in many FM (same function group) there is a way to use it in object oriented ? i new to abap object. PERFORM qua TABLES periods USING sy-datum.   READ TABLE periods INTO wa_periods INDEX 1.   PERFORM quar TAB

  • Return(inbound delivery) creation through VL01N

    Hello, I wud like to create Return(Inbound) delivery through VL01N transaction. Following is the process i' m following. 1. create notification through IW51 2. create repair order through IW52 3.create return delivery ( automatically) through VL01N w