0

I am doing a Java program for my college assignment, but something isn't working. I can be considered a novice in Java as I do not have much coding experience.

package javaassignment;

import java.io.*;
import java.util.*;

public class Main extends javax.swing.JFrame 

{
private FileInputStream in;
static String name;
Scanner file;

 public Main(String filename) throws FileNotFoundException 
 {
    in = new FileInputStream(filename);
    try
    {
      file=new Scanner(new File("c:/users/MSI-USER/desktop/JavaAssignment/Student.txt"));  
    }
    catch(FileNotFoundException ea)
    {
        ea.printStackTrace();
    }
 }
 public void Read()
 {
     do
     {
         name=file.nextLine();       
     }
     while(file.hasNext());
     System.out.println(name);
     file.close();
 }


 public String getWord() throws IOException 
 {
    int c;
    StringBuffer buf = new StringBuffer();

    do 
    {
      c = in.read();
      if (Character.isSpace((char) c))
        return buf.toString();
      else
        buf.append((char) c);
    } while (c != -1);

    return buf.toString();
  }

    public Main() 
    {
        ComboPanel.add(NameText);
        NameText.setEditable(false);
        NameText.setText(name);
        initComponents();
    }


    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        ButtonPanel = new javax.swing.JPanel();
        PrintButton = new javax.swing.JButton();
        SaveButton = new javax.swing.JButton();
        CalcButton = new javax.swing.JButton();
        LabelPanel = new javax.swing.JPanel();
        StudentLabel = new javax.swing.JLabel();
        AttendanceLabel = new javax.swing.JLabel();
        ScrollPanel = new javax.swing.JPanel();
        jScrollBar1 = new javax.swing.JScrollBar();
        ComboPanel = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        PrintButton.setText("Print");
        PrintButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                PrintButtonActionPerformed(evt);
            }
        });

        SaveButton.setText("Save");
        SaveButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                SaveButtonActionPerformed(evt);
            }
        });

        CalcButton.setText("Calculate Percentage");
        CalcButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                CalcButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout ButtonPanelLayout = new javax.swing.GroupLayout(ButtonPanel);
        ButtonPanel.setLayout(ButtonPanelLayout);
        ButtonPanelLayout.setHorizontalGroup(
            ButtonPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(ButtonPanelLayout.createSequentialGroup()
                .addGap(43, 43, 43)
                .addComponent(SaveButton, javax.swing.GroupLayout.PREFERRED_SIZE, 126, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(PrintButton, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(CalcButton)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        ButtonPanelLayout.setVerticalGroup(
            ButtonPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(ButtonPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(ButtonPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(PrintButton, javax.swing.GroupLayout.DEFAULT_SIZE, 66, Short.MAX_VALUE)
                    .addComponent(CalcButton, javax.swing.GroupLayout.DEFAULT_SIZE, 66, Short.MAX_VALUE)
                    .addComponent(SaveButton, javax.swing.GroupLayout.DEFAULT_SIZE, 66, Short.MAX_VALUE))
                .addGap(21, 21, 21))
        );

        StudentLabel.setText("Student");

        AttendanceLabel.setText("Attendance Status");

        javax.swing.GroupLayout ComboPanelLayout = new javax.swing.GroupLayout(ComboPanel);
        ComboPanel.setLayout(ComboPanelLayout);
        ComboPanelLayout.setHorizontalGroup(
            ComboPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 0, Short.MAX_VALUE)
        );
        ComboPanelLayout.setVerticalGroup(
            ComboPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 0, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout ScrollPanelLayout = new javax.swing.GroupLayout(ScrollPanel);
        ScrollPanel.setLayout(ScrollPanelLayout);
        ScrollPanelLayout.setHorizontalGroup(
            ScrollPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, ScrollPanelLayout.createSequentialGroup()
                .addComponent(ComboPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
        ScrollPanelLayout.setVerticalGroup(
            ScrollPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 460, Short.MAX_VALUE)
            .addComponent(ComboPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout LabelPanelLayout = new javax.swing.GroupLayout(LabelPanel);
        LabelPanel.setLayout(LabelPanelLayout);
        LabelPanelLayout.setHorizontalGroup(
            LabelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(LabelPanelLayout.createSequentialGroup()
                .addComponent(StudentLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 382, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(AttendanceLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 378, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(15, Short.MAX_VALUE))
            .addComponent(ScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        LabelPanelLayout.setVerticalGroup(
            LabelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(LabelPanelLayout.createSequentialGroup()
                .addGroup(LabelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(AttendanceLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 89, Short.MAX_VALUE)
                    .addComponent(StudentLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(ScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(LabelPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(ButtonPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(LabelPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(ButtonPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>                        

    private void SaveButtonActionPerformed(java.awt.event.ActionEvent evt) {                                           
        // TODO add your handling code here:
    }                                          

    private void PrintButtonActionPerformed(java.awt.event.ActionEvent evt) {                                            

    }                                           

    private void CalcButtonActionPerformed(java.awt.event.ActionEvent evt) {                                           
     JavaAssignment J=new JavaAssignment();
     PercentageDialog P=new PercentageDialog();
     P.setVisible(true);

    }                                          




    public static void main(String args[]) throws java.io.IOException
    {




        try 
        {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) 
            {
                if ("Nimbus".equals(info.getName())) 
                {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } 
        catch (ClassNotFoundException ex) 
        {
            java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } 
        catch (InstantiationException ex) 
        {
            java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } 
        catch (IllegalAccessException ex) 
        {
            java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } 
        catch (javax.swing.UnsupportedLookAndFeelException ex) 
        {
            java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }

        java.awt.EventQueue.invokeLater(() -> {
            new Main().setVisible(true);
        });
    }
    private javax.swing.JTextField NameText;

    // Variables declaration - do not modify                     
    private javax.swing.JLabel AttendanceLabel;
    private javax.swing.JPanel ButtonPanel;
    private javax.swing.JButton CalcButton;
    private javax.swing.JPanel ComboPanel;
    private javax.swing.JPanel LabelPanel;
    private javax.swing.JButton PrintButton;
    private javax.swing.JButton SaveButton;
    private javax.swing.JPanel ScrollPanel;
    private javax.swing.JLabel StudentLabel;
    private javax.swing.JScrollBar jScrollBar1;
    // End of variables declaration                   
}

I want to display the contents of an external file in a JFrame, but when I run the program, it keeps giving me this error.

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at javaassignment.Main.<init>(Main.java:57)
    at javaassignment.Main.lambda$main$0(Main.java:254)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
BUILD SUCCESSFUL (total time: 2 seconds)

Can someone please tell me what am I doing wrong?

Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
  • You are invoking `ComboPanel` in `Main()` constructor even before it is initialized in `initComponents()`. Hence NPE for invoking methods on `null` object So bring you initialization of components at the top: public Main() { initComponents(); ComboPanel.add(NameText); NameText.setEditable(false); NameText.setText(name); } – JavaYouth Jun 08 '18 at 03:34
  • Ha! I didn't even see the initComponents because the editor folded it away. Nicely spotted. – Rick Jun 08 '18 at 04:12

1 Answers1

1

In Java java.lang.NullPointerException almost always means that you tried to do something to a null object - one that hasn't been created, or an object that was created but not properly initialised.

Line 57 is this:

        NameText.setEditable(false);

So the first place to look is to see if you ever create NameText.

You put it much further down:

private javax.swing.JTextField NameText;

Note that you're violating an important style principle - objects and variables should be lower case initially, and classes should be capitalised initially.

Note that this is the opposite of natural English usage.

Steve is a person.

In Java:

Person steve = new Person();

You'll get used to it. If you don't other people (and you!) are going to have a lot more difficulty reading your code.

So NameText should be nameText.

Now that the obligatory style nagging is over, I can return to the obligatory initialisation nagging :D

YOU MUST NEW NAMETEXT BEFORE YOU USE IT.

e.g.

        NameText = new JTextField();

Note that you are almost certainly going to have the same problem with all your other variables.

Also, returning to the stylistic nagging - calling the class Main made it harder to understand what was going on, because the constructor looks too similar to the default Java entry point (that public static void main(String[] args) thing which is the starting point where you code starts executing).

Rick
  • 576
  • 3
  • 12