-1

I've done some searching on these types of errors and still can't quite figure out what I'm doing wrong. My Applet won't start/initialize. The applet window pops up and then says Start: applet not initialized at the bottom.

Here are the errors:

java.lang.NullPointerException
at randomquotegenerator.quote.init(quote.java:170)
at sun.applet.AppletPanel.run(AppletPanel.java:424)
at java.lang.Thread.run(Thread.java:619)

The line that's coming back as erroring for quote.java:170 is in the init() section:

readLines(quoteFiles[0].getName());

I have 7 text files with quotes in them, one per each line and the first line is the title for the quotes. Each line is surrounded by double quotes "".

  //****************************************************************************
  //****************************************************************************
  //** Imports                                                                **
  //****************************************************************************
  package randomquotegenerator;

  import java.io.*;
  import java.lang.*;
  import java.awt.*;
  import java.awt.event.*;
  import java.applet.*;
  import javax.swing.*;


  //****************************************************************************
  //** Class Definination                                                     **
  //****************************************************************************


  public class quote extends JApplet implements ActionListener,Runnable
  {

  //****************************************************************************
  //**  Class Global Variables                                               **
  //****************************************************************************

      int randomLine=0,maxLines=0,maxFiles=0,quoteLine=0,quoteFile=0;
      int doneFiles[] =new int[100];
      int doneLines[] =new int[200];
      int randomSwitch=-1,linearSwitch=-1;
      int TimeDelay=0,TimeWait=1;
      int currentFile=0,currentLine=0,unreadLines=0,unreadFiles=0;
      //int randomFile,randomLine;
      File path=new File("quotes\\");
      File[] quoteFiles=path.listFiles();

      Thread thread;
      Panel northPanel=new Panel();
      Panel centerPanel=new Panel();
      Panel southPanel=new Panel(new GridLayout(1,0));

      Panel Labels     = new Panel(new GridLayout(0,1));
      Panel ListBox1  = new Panel(new GridLayout(1,0));
      Panel ListBox2  = new Panel(new GridLayout(1,0));
      Panel ButtonSet1 = new Panel(new GridLayout(3,2));
      Panel ButtonSet2 = new Panel(new GridLayout(0,1));


      JLabel lab1=new JLabel("Quote Files");
      JLabel lab2=new JLabel("Current File");
      JLabel lab3=new JLabel("Quote Lines ");
      JLabel lab4=new JLabel("Current Line");
      JLabel lab5=new JLabel("TimeDelay ");
      JLabel lab6=new JLabel("    ");
      JLabel lab7=new JLabel("    ");

      List FilesList=new List(7);
      List LinesList=new List(7);

      JTextArea quoteDisplay= new JTextArea(18,36);
      JLabel quoteTitle = new JLabel("Java Applet Random Quote Displayer");


      Button PrevLine=new Button("Prev Line");
      Button NextLine=new Button("Next Line");
      Button PrevFile=new Button("Prev File");
      Button NextFile=new Button("Next File");
      Button ResetLine=new Button("Reset  Lines");
      Button ResetFile=new Button("Reset  Files");
      Button Settings=new Button("Settings ");
      Button NullButton1=new Button("         ");

      Button LinearButton=new Button("Linear Mode");
      Button RandomButton=new Button("Random Mode");
      Button ExitButton=new Button("Exit");

      boolean done=false;

      //String s=new String;;
      String lines[]=new String[200];



  //****************************************************************************
  //** Inititialize                                                                        
  //****************************************************************************

      @Override

      public void init(){

          setSize(768, 500);
          setLayout(new BorderLayout());

          add("North",northPanel);
          northPanel.setBackground(Color.blue);

          add("Center",centerPanel);
          centerPanel.setBackground(Color.black);

          add("South",southPanel);
          southPanel.setBackground(new Color(64,64,64));
          northPanel.setBackground(new Color(64,64,64));

          Labels.add(lab1);
          Labels.add(lab2);
          Labels.add(lab3);
          Labels.add(lab4);
          Labels.add(lab5);
          Labels.add(lab6);
          Labels.add(lab7);

          ListBox1.add(FilesList);
          ListBox2.add(LinesList);

          ButtonSet1.add(PrevLine);
          ButtonSet1.add(NextLine);
          ButtonSet1.add(PrevFile);
          ButtonSet1.add(NextFile);
          ButtonSet1.add(ResetLine);
          ButtonSet1.add(ResetFile);
          //ButtonSet1.add(Settings);
          //ButtonSet1.add(NullButton1);

          ButtonSet2.add(LinearButton);
          ButtonSet2.add(RandomButton);
          ButtonSet2.add(ExitButton);


          southPanel.add(Labels);
          southPanel.add(ListBox1);
          southPanel.add(ListBox2);
          southPanel.add(ButtonSet1);
          southPanel.add(ButtonSet2);
          centerPanel.add(quoteDisplay);
          northPanel.add(quoteTitle);
          //quoteDisplay.setColor(new Color(255,255,255));

          FilesList.addActionListener(this);
          LinesList.addActionListener(this);

          PrevLine.addActionListener(this);
          NextLine.addActionListener(this);
          PrevFile.addActionListener(this);
          NextFile.addActionListener(this);
          ResetLine.addActionListener(this);
          ResetFile.addActionListener(this);
          Settings.addActionListener(this);
          //NullButton1.addActionListener(this);
          LinearButton.addActionListener(this);
          RandomButton.addActionListener(this);
          ExitButton.addActionListener(this);

          Font font=new Font("times",Font.BOLD,24);
          quoteDisplay.setFont(font);
          quoteDisplay.setEditable(false);
          quoteDisplay.setLineWrap(true);
          quoteDisplay.setWrapStyleWord(true);

          Font font2=new Font("times",Font.BOLD,16);
          quoteTitle.setFont(font2);


          listFiles();
          readLines(quoteFiles[0].getName());


          FilesList.select(0);
          LinesList.select(0);
          TimeDelay=lines[0].length()*TimeWait;
          unreadFiles=maxFiles;
          unreadLines=maxLines;

          currentFile=0;
          currentLine=0;
          done=false;
          //maxLines=10;
          creatRandomFiles();
          creatRandomLines();

          lab1.setText("quote Files  =  "+maxFiles);
          lab2.setText("File = "+quoteFiles[0].getName());
          lab3.setText("quote Lines = "+maxLines);
          lab4.setText("Current Line = "+quoteLine);
          lab5.setText("TimeDelay  = "+TimeDelay);
          lab6.setText("Lines Unread "+unreadLines);
          lab7.setText("Files Unread "+unreadFiles);
          JOptionPane.showMessageDialog(null, " By Erin");

      }

  //*********************************************
  //*                                           *
  //*********************************************

  public void creatRandomFiles()
  {
    for (int i=0;i<maxFiles;i++)
    {
        doneFiles[i]=(int)(Math.random()*maxFiles);
        for(int j=0;j<i;j++) if (doneFiles[j]==doneFiles[i]) i--;
        //System.out.println("maxLines = "+doneLines[i]+"");
    }

  }

  //*********************************************
  //*                                           *
  //*********************************************

  public void creatRandomLines()
  {
    for (int i=0;i<maxLines;i++)
    {
        doneLines[i]=(int)(Math.random()*maxLines);
        for(int j=0;j<i;j++) if (doneLines[j]==doneLines[i]) i--;
        //System.out.println("maxLines = "+doneLines[i]+"");
    }

  }

  //*********************************************
  //*                                           *
  //*********************************************

  public void runLinearLines()
  {
           while(currentLine<maxLines)
            {
                    quoteLine=currentLine;
                    selectLine();
                    TimeDelay=lines[quoteLine].length()*TimeWait;
                    unreadLines=maxLines-currentLine;
                    lab5.setText("TimeDelay  = "+TimeDelay);
                    lab6.setText("Lines Unread "+unreadLines);
                    currentLine++;
                    System.out.println("Line Data:  "+ (currentLine+1)+ ". Line= "+doneLines[currentLine]+ ", Unread= "+ unreadLines+" ,time=" +TimeDelay+" ms");
                    try   {thread.sleep(TimeDelay);}
                    catch (Exception exception){}
             }

              currentLine=0;
              quoteLine=0;
              unreadLines=maxLines-currentLine;
              currentFile++;
              unreadFiles=maxFiles-currentFile;
              quoteFile=currentFile;
              FilesList.select(quoteFile);
            //FilesList.makeVisible(quoteFile);
              readLines(quoteFiles[FilesList.getSelectedIndex()].getName());
              lab6.setText("Lines Unread "+unreadLines);
              lab2.setText("File = "+quoteFiles[FilesList.getSelectedIndex()].getName());
              lab7.setText("Files Unread "+unreadFiles);

              System.out.println("-------------------------------------------------------------");
              System.out.println("File Data:  "+ (currentFile+1)+ ", " + quoteFiles[FilesList.getSelectedIndex()].getName()+". File= "+doneFiles[currentFile]+" ,time=" +TimeDelay+" ms");
              System.out.println("-------------------------------------------------------------");

              if (unreadFiles<0)
              {
                  currentFile=0;
                  currentLine=0;
              }

  }


  //*********************************************
 //*                                           *
  //*********************************************

  public void runRandomLines()
  {
           //currentLine=0;
           while(currentLine<maxLines)
           {
                    quoteLine=doneLines[currentLine];
                    selectLine();
                    TimeDelay=lines[quoteLine].length()*TimeWait;
                    unreadLines=maxLines-currentLine;
                    lab5.setText("TimeDelay  = "+TimeDelay);
                    lab6.setText("Lines Unread "+unreadLines);
                    currentLine++;
                    System.out.println("Line Data:  "+ (currentLine+1)+ ". Line= "+doneLines[currentLine]+ ", Unread= "+ unreadLines+" ,time=" +TimeDelay+" ms");
                    try   {thread.sleep(TimeDelay);}catch (Exception exception){}
             }

              currentLine=0;
              quoteLine=0;
              unreadLines=maxLines-currentLine;
              currentFile++;
              unreadFiles=maxFiles-currentFile;
              quoteFile=doneFiles[currentFile];
              FilesList.select(quoteFile);
            //FilesList.makeVisible(quoteFile);
              for (int i=0;i<200;i++) doneLines[i]=0;
              creatRandomLines();
              readLines(quoteFiles[FilesList.getSelectedIndex()].getName());
              lab6.setText("Lines Unread "+unreadLines);
              lab2.setText("File = "+quoteFiles[FilesList.getSelectedIndex()].getName());
              lab7.setText("Files Unread "+(unreadFiles+1));

              System.out.println("-------------------------------------------------------------");
              System.out.println("File Data:  "+ (currentFile+1)+ ", " + quoteFiles[FilesList.getSelectedIndex()].getName()+". File= "+doneFiles[currentFile]+" ,time=" +TimeDelay+" ms");
              System.out.println("-------------------------------------------------------------");

              if (unreadFiles<0)
              {
                  for (int i=0;i<100;i++) doneFiles[i]=0;
                  for (int i=0;i<200;i++) doneLines[i]=0;
                  creatRandomFiles();
                  creatRandomLines();
                  currentFile=0;
                  currentLine=0;
              }

            //System.out.println("------------------------------");

  }

  //****************************************************************************
  //**  Paint                                                                 **
  //****************************************************************************
  @Override
  public void paint(Graphics g)
  {


  }


  //****************************************************************************
  //**  Thread                                                                **
  //****************************************************************************

    @Override
    public void start()
   {
      thread = new Thread(this);
      thread.start();
    }
    @Override
    synchronized public void run()
    {
       while (true)
        {

         //*********************************************
          //*                                           *
          //*********************************************
          if (randomSwitch==1)
          {
              creatRandomLines();
              runRandomLines();

          }

          if (linearSwitch==1)
          {
            runLinearLines();
          }

       }
    }
   @Override
    public void stop()
    {
     if (thread != null) thread.stop();
    }


  //****************************************************************************
  //** actionPerformed                                                        **
  //****************************************************************************

    public void selectFile()
    {
        for (int i=0;i<200;i++) doneLines[i]=0;
         FilesList.select(quoteFile);
         //FilesList.makeVisible(quoteFile);
         readLines(quoteFiles[FilesList.getSelectedIndex()].getName());
         lab2.setText("File = "+quoteFiles[FilesList.getSelectedIndex()].getName());

    }

  //*********************************************
  //*                                           *
  //*********************************************

    public void selectLine()
    {

         LinesList.select(quoteLine);
         //LinesList.makeVisible(quoteLine);
         quoteDisplay.setText(lines[LinesList.getSelectedIndex()]);
         lab4.setText("Current Line = "+(quoteLine+1));
         TimeDelay=lines[quoteLine].length()*TimeWait;
         lab5.setText("TimeDelay  = "+TimeDelay);

    }
  //*********************************************
  //*                                           *
  //*********************************************

    @Override
    public boolean keyDown(Event event, int key)
    {
         switch(key)
         {
             case 10:
                //enter
             break;
             case 32:
                         //space
             break;

             case 27:
                    //esc
                    System.exit(0);
             break;


             case 1006:
                        //left
                     done=true;
                     quoteLine=0;
                     quoteFile--;if (quoteFile<1) quoteFile=0;
                     selectFile();
                     selectLine();

             break;

             case 1007:
                        //right
                     done=true;
                     quoteLine=0;
                     quoteFile++;if (quoteLine>maxFiles) quoteFile=maxFiles;
                     selectFile();
                     selectLine();

             break;

             case 1004:
                          //up
                     quoteLine--;if (quoteLine<1) quoteLine=0;
                     selectLine();
             break;

             case 1005:
                         //down
                     quoteLine++;if (quoteLine>maxLines) quoteLine=maxLines;
                     selectLine();

             break;


          }

           showStatus("(key= "+key+") ");

           return false;
    }

  //*********************************************
  //*                                           *
  //*********************************************
    @Override
    public void actionPerformed(ActionEvent event)
    {

     if (event.getSource()==ExitButton)
     {
         //System.exit(0);
     }

     if (event.getSource()==LinesList)
     {

         quoteLine=LinesList.getSelectedIndex();
         showStatus(FilesList.getSelectedItem()+" " +LinesList.getSelectedItem()+ "  "+ LinesList.getSelectedIndex());
        quoteDisplay.setText(lines[LinesList.getSelectedIndex()]);
        lab4.setText("Current Line = "+(quoteLine+1));
        //quoteTitle.setText(lines[LinesList.getSelectedIndex()]);
     }

     if (event.getSource()==FilesList)
     {
         quoteFile=FilesList.getSelectedIndex();
         lab2.setText("File = "+quoteFiles[FilesList.getSelectedIndex()].getName());
         showStatus(FilesList.getSelectedItem()+" " +LinesList.getSelectedItem()+ "  "+ LinesList.getSelectedIndex());
         readLines(quoteFiles[FilesList.getSelectedIndex()].getName());
         quoteLine=0;
         //selectFile();
         selectLine();
     }

     if (event.getSource()==PrevLine)
     {

         quoteLine--;if (quoteLine<1) quoteLine=0;
         selectLine();
     }

     if (event.getSource()==NextLine)
     {

         quoteLine++;if (quoteLine>maxLines) quoteLine=maxLines;
         selectLine();
     }

     if (event.getSource()==PrevFile)
     {
         done=true;
         quoteLine=0;
         quoteFile--;if (quoteFile<1) quoteFile=0;
         selectFile();
         selectLine();
     }

     if (event.getSource()==NextFile)
     {
         done=true;
         quoteLine=0;
         quoteFile++;if (quoteLine>maxFiles) quoteFile=maxFiles;
         selectFile();
         selectLine();
     }

     if (event.getSource()==ResetLine)
     {
         quoteLine=0;
         quoteFile=0;
         selectFile();
         selectLine();

     }

     if (event.getSource()==ResetFile)
     {
         quoteLine=0;
         quoteFile=0;
         selectFile();
         selectLine();
     }

     if (event.getSource()==LinearButton)
     {
       linearSwitch=-linearSwitch;


       if (linearSwitch==1)
       {
           randomSwitch=-1;
           LinearButton.setLabel("Linear Off ");
           RandomButton.setLabel("Random On");
       }
       else
       {
           LinearButton.setLabel("Linear On");
       }

       System.out.println("linearSwitch = " + linearSwitch+", randomSwitch= "+randomSwitch);
     }

     if (event.getSource()==RandomButton)
     {
       randomSwitch=-randomSwitch;


       if (randomSwitch==1)
       {
           linearSwitch =-1;
           RandomButton.setLabel("Random Off ");
           LinearButton.setLabel("Linear On");
       }
       else
       {
           RandomButton.setLabel("Random On");
       }

       System.out.println("linearSwitch = " + linearSwitch+", randomSwitch= "+randomSwitch);
     }

     if (event.getSource()==ExitButton)
     {
       System.exit(0);
     }

  }

  //*********************************************
  //*                                           *
  //*********************************************

  public void readLines(String fileName)
  {
        DataInputStream inStream;

        int count=0;
        LinesList.removeAll();

           try {
              inStream = new DataInputStream(
                            new FileInputStream("quotes\\"+fileName));

              while ( inStream.available() > 0 )
              {
                  lines[count]=inStream.readLine();
                  if (count==0)
                 {
                      quoteTitle.setText(lines[count]);
                      quoteDisplay.setText(lines[count]);
                  }
                  LinesList.add((count+1) + "");
                // System.out.println( lines[count]);
                 count++;
              } // End while.
             maxLines=count;
              lab3.setText("quote Lines = "+maxLines);

              inStream.close();
           } catch ( java.io.IOException exception)
           {
             if ( exception instanceof FileNotFoundException)
             {
                System.out.println(
                   "A file called test.txt could not be found, \n" +
                   "or could not be opened.\n"                     +
                   "Please investigate and try again.");
             }
           }
  }

  //*********************************************
  //*                                           *
  //*********************************************

  public void listFiles()
  {

       int i;
       maxFiles=0;

       if (quoteFiles !=null)
       {

       for (i=0;i<quoteFiles.length;i++)
       {
          // System.out.println(" "+i +"  " + quoteFiles[i]);
            FilesList.add(quoteFiles[i].getName());
            maxFiles++;


       }
       lab1.setText("quote Files  =  "+maxFiles);
   }

  }


  //****************************************************************************
  //**                                                                        **
 //****************************************************************************


  }
Bo Persson
  • 90,663
  • 31
  • 146
  • 203
Erin
  • 41
  • 1
  • 2
  • 6
  • 666 lines of code. Is that significant? For better help sooner, post an [SSCCE](http://sscce.org/). Note that an untrusted applet cannot get `File` listings, and the applet cannot report file listings for a directory on the server - only directories on the client. – Andrew Thompson Nov 19 '11 at 01:54

1 Answers1

0
  File path=new File("quotes\\");
  File[] quoteFiles=path.listFiles();

path could be returning null.

Try declaring it, then initializing it in the init().

If it is null, then the quoteFiles would be empty, because listFiles() most likely has a catch on it, so path would be null.

Tell me if this helps :D

Firexranger8

Matt
  • 95
  • 6
  • I was kind of wondering if path might be returning null. I'm using netbeans and it's tacking on my projectname.quotes for my quotes folder. I tried putting the name.quotes\\ in place of quotes\\ in the path, but I still get the same error. You said to try declaring it and initializing it in the init(), so basically move my declaration inside of my method instead of where it's at now, right? – Erin Nov 18 '11 at 19:16
  • Try adding a null check for the file before you try to readLines(String); method. Also, just for convenience I copied it and put it in IDE to find the line faster, and line 170 apparantly is: `TimeDelay=lines[0].length()*TimeWait;` – Matt Nov 18 '11 at 19:19
  • I didn't copy a few comment lines in the beginning so don't go by the line number if you're looking in an IDE. :) The error is on the readLines line. I will try to write a null check for that method. Thanks! – Erin Nov 18 '11 at 19:24