0

*A lot of the code regarding the GUI is generated by NetBeans.

The problem I am getting is on the client side, telling me that uploadBtn is null, nullPointException. Am pretty sure this is because it is not instantiated and am adding an actionListener in the constructor. I built the GUI via NetBeans, not really sure how to go about it.

What I want is when the uploadBtn is clicked, something to happen on the client and server side. Once the button is clicked, it does call the actionPerformed() NetBeans created for me on the client side, but not sure how to check if the button is pressed on the server side, and if so, it would call a method in the server. Any help appreciated. Am using sockets/datagram. College project.

ClientGUI.java

public class ClientGUI extends javax.swing.JFrame {

String username;

/**
 * Creates new form NewJFrame
 */
public ClientGUI() {
    initComponents();     
}

public ClientGUI(ActionListener listen)
{
    uploadBtn.addActionListener(listen);
}

/**
 * This method is called from within the constructor to initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is always
 * regenerated by the Form Editor.
 */
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    jPanel1 = new javax.swing.JPanel();
    jLabel1 = new javax.swing.JLabel();
    usernameTxt = new javax.swing.JTextField();
    passwordTxt = new javax.swing.JTextField();
    loginBtn = new javax.swing.JButton();
    jLabel2 = new javax.swing.JLabel();
    jLabel3 = new javax.swing.JLabel();
    uploadBtn = new javax.swing.JButton();
    jLabel4 = new javax.swing.JLabel();
    downloadBtn = new javax.swing.JButton();
    logOffBtn = new javax.swing.JButton();
    portTxt = new javax.swing.JTextField();
    hostTxt = new javax.swing.JTextField();
    createFile = new javax.swing.JButton();
    fileNameTxt = new javax.swing.JTextField();
    connectionLbl = new javax.swing.JLabel();
    notifyLbl = new javax.swing.JLabel();
    downloadFileNameTxt = new javax.swing.JTextField();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jPanel1.setBackground(new java.awt.Color(0, 0, 51));

    jLabel1.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
    jLabel1.setForeground(new java.awt.Color(255, 255, 255));
    jLabel1.setText("File Transfer System");

    usernameTxt.setText("Username");

    passwordTxt.setText("Password");

    loginBtn.setText("Login");
    loginBtn.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            loginBtnActionPerformed(evt);
        }
    });

    jLabel2.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
    jLabel2.setForeground(new java.awt.Color(255, 255, 255));
    jLabel2.setText("Login");

    jLabel3.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
    jLabel3.setForeground(new java.awt.Color(255, 255, 255));
    jLabel3.setText("Upload");

    uploadBtn.setText("Upload");
    uploadBtn.setName("Upload"); // NOI18N
    uploadBtn.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            uploadBtnActionPerformed(evt);
        }
    });

    jLabel4.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
    jLabel4.setForeground(new java.awt.Color(255, 255, 255));
    jLabel4.setText("Download");

    downloadBtn.setText("Download");
    downloadBtn.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            downloadBtnActionPerformed(evt);
        }
    });

    logOffBtn.setBackground(new java.awt.Color(153, 0, 0));
    logOffBtn.setForeground(new java.awt.Color(255, 255, 255));
    logOffBtn.setText("Log Off");
    logOffBtn.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            logOffBtnActionPerformed(evt);
        }
    });

    portTxt.setText("7");
    portTxt.setToolTipText("Port");

    hostTxt.setText("localhost");

    createFile.setText("Create File");
    createFile.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            createFileActionPerformed(evt);
        }
    });

    fileNameTxt.setText("File Name");

    connectionLbl.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
    connectionLbl.setForeground(new java.awt.Color(255, 0, 0));
    connectionLbl.setText("Not Connected");

    notifyLbl.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
    notifyLbl.setForeground(java.awt.Color.green);

    downloadFileNameTxt.setText("File Name");

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
    jPanel1.setLayout(jPanel1Layout);
    jPanel1Layout.setHorizontalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addGap(21, 21, 21)
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel1Layout.createSequentialGroup()
                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addComponent(portTxt, javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(usernameTxt, javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(passwordTxt, javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(loginBtn, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 82, Short.MAX_VALUE))
                    .addGap(101, 101, 101)
                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(notifyLbl)
                        .addGroup(jPanel1Layout.createSequentialGroup()
                            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                .addComponent(fileNameTxt, javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(createFile, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(uploadBtn, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                            .addGap(115, 115, 115)
                            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(downloadFileNameTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(jLabel4)
                                .addComponent(downloadBtn, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(logOffBtn)))))
                .addComponent(connectionLbl)
                .addComponent(hostTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGroup(jPanel1Layout.createSequentialGroup()
                    .addGap(152, 152, 152)
                    .addComponent(jLabel1)))
            .addContainerGap(49, Short.MAX_VALUE))
    );
    jPanel1Layout.setVerticalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jLabel1)
            .addGap(26, 26, 26)
            .addComponent(connectionLbl)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 53, Short.MAX_VALUE)
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(jLabel2)
                .addComponent(jLabel3)
                .addComponent(jLabel4))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(usernameTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(createFile)
                .addComponent(downloadFileNameTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(passwordTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(downloadBtn))
            .addGap(30, 30, 30)
            .addComponent(hostTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(10, 10, 10)
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(portTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(fileNameTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(loginBtn)
                .addComponent(uploadBtn)
                .addComponent(logOffBtn))
            .addGap(42, 42, 42)
            .addComponent(notifyLbl)
            .addGap(36, 36, 36))
    );

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    );

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

private void loginBtnActionPerformed(java.awt.event.ActionEvent evt) {                                         
    try {

        String hostname = hostTxt.getText();
        String port = portTxt.getText();
        username = usernameTxt.getText();
        String password = passwordTxt.getText();
        ClientGUI client = new ClientGUI();

        Users usersClass = new Users();

        if (hostname.length() == 0) // if user did not enter a name
        {
            hostname = "localhost";  //   use the default host name
        }

        if (port.length() == 0) // if user did not enter a name
        {
            port = "7";  //   use the default host name
        }

        Map<String, String> users;
        users = usersClass.getSet();

        if (users.containsKey(username) && users.containsValue(password)) {
            JOptionPane.showMessageDialog(null, "Logged in Successfully. Welcome " + username);
            connectionLbl.setText("Connected");
            connectionLbl.setForeground(Color.green);
            hostTxt.setEditable(false);
            portTxt.setEditable(false);
            usernameTxt.setEditable(false);
            passwordTxt.setEditable(false);
            loginBtn.setEnabled(false);

            createUserFolder(username);
            new File("C:\\ServerFolder\\" + username).mkdirs();
        } else if (!users.containsKey(username) && !users.containsValue(password)) {
            JOptionPane.showMessageDialog(null, "User does not exist.  Try again.");
        }

        ClientHelper helper
                = new ClientHelper(hostname, port, username, password);

        boolean check = client.validateUsername(username);
        while (check) {
            String serverResponse = helper.sendMessageUsername(username);
            System.out.println(serverResponse);
            check = false;
        }

    } catch (SocketException ex) {
        Logger.getLogger(ClientGUI.class.getName()).log(Level.SEVERE, null, ex);
    } catch (UnknownHostException ex) {
        Logger.getLogger(ClientGUI.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(ClientGUI.class.getName()).log(Level.SEVERE, null, ex);
    }


}                                        

public File createUserFolder(String folderName) {
    File directory = new File("C:\\" + folderName);
// if the directory does not exist, create it
    if (!directory.exists()) {
        System.out.println("Creating Directory... ");
        boolean result = false;

        try {
            directory.mkdir();
            result = true;
        } catch (SecurityException se) {
            //handle it
        }
        if (result) {
            System.out.println("Directory Created");
        }
    }

    return directory;
}


public JButton getButton()
{
    return uploadBtn;
}

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

    //   try {
    String hostname = hostTxt.getText();
    String port = portTxt.getText();
    username = usernameTxt.getText();
    String password = passwordTxt.getText();
    hostTxt.setEditable(true);
    portTxt.setEditable(true);
    usernameTxt.setEditable(true);
    passwordTxt.setEditable(true);
    loginBtn.setEnabled(true);

    connectionLbl.setText("Not Connected");
    connectionLbl.setForeground(Color.red);

   //            ClientHelper helper
   //                    = new ClientHelper(hostname, port, username, password);
   //                   
    //                String serverResponse =helper.sendMessageLogOff(username);
   //                System.out.println(serverResponse);
   //                
   //            
   //        } catch (SocketException ex) {
    //                Logger.getLogger(ClientGUI.class.getName()).log(Level.SEVERE, null, ex);
    //        } catch (UnknownHostException ex) {
     //            Logger.getLogger(ClientGUI.class.getName()).log(Level.SEVERE, null, ex);
 //        } catch (IOException ex) {
    //            Logger.getLogger(ClientGUI.class.getName()).log(Level.SEVERE, null, ex);
    //        }

}                                         

public void createFile(String fileName) {
    String sb = "TEST CONTENT";
    JFileChooser chooser = new JFileChooser();
    chooser.setCurrentDirectory(new File("C:\\" + fileName));
    int retrieval = chooser.showSaveDialog(null);

    if (retrieval == JFileChooser.APPROVE_OPTION) {
        try {
            FileWriter fw = new FileWriter(chooser.getSelectedFile() + ".txt");
            fw.write(sb.toString());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

public void createServerFile() throws IOException
{
     String str = "This is a server file!";
        File newTextFile = new File("C:\\ServerFolder\\serverFile.txt");

        FileWriter fw = new FileWriter(newTextFile);
        fw.write(str);
        fw.close();
        System.out.println("\n904 - Server file created - 'serverFile.txt'");
}


private void createFileActionPerformed(java.awt.event.ActionEvent evt) {                                           
    // TODO add your handling code here:       
    createFile(username);
    notifyLbl.setText("File Created!");

    Timer timer = new Timer(5000, e -> notifyLbl.setText(""));
    timer.setRepeats(false);
    timer.start();

}                                          


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

    try {

        // TODO add your handling code here:
        String fileName = fileNameTxt.getText();
        String hostname = hostTxt.getText();
        String port = portTxt.getText();
        String username = usernameTxt.getText();
        String password = passwordTxt.getText();
        String text = "This is " + username + "'s file!";
        ClientHelper helper
                = new ClientHelper(hostname, port, username, password);

        File file = new File("C:\\" + username + "\\" + fileName + ".txt");
        if (!file.exists()) {
            System.out.println("File not found!");
        } else {

            String myFile = helper.writeFileAndSend(fileName, username, text);
            System.out.println("Response:\n" + "File name: " + myFile + " User: " + username);

             notifyLbl.setText("File Uploaded");

            Timer timer = new Timer(5000, e -> notifyLbl.setText(""));
            timer.setRepeats(false);
            timer.start();
        }
    } catch (SocketException ex) {
        Logger.getLogger(ClientGUI.class.getName()).log(Level.SEVERE, null, ex);
    } catch (UnknownHostException ex) {
        Logger.getLogger(ClientGUI.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(ClientGUI.class.getName()).log(Level.SEVERE, null, ex);
    }
}                                         


private void downloadBtnActionPerformed(java.awt.event.ActionEvent evt) {                                            
    try {
        // TODO add your handling code here:          
        String hostname = hostTxt.getText();
        String port = portTxt.getText();
        username = usernameTxt.getText();
        String password = passwordTxt.getText();
        String fileToDownload = downloadFileNameTxt.getText();
        String messageInFile = "User Downloaded: " + username + " *********This is a server File!**********";
        ClientHelper helper
                = new ClientHelper(hostname, port, username, password);

        File file = new File("C:\\ServerFolder\\" + fileToDownload + ".txt");
        if (!file.exists()) {
            System.out.println("File not found!");
        } else {

            helper.readFileAndSend(fileToDownload, messageInFile);
            System.out.println("\nResponse:\n" + "File name: " + fileToDownload + " User: " + username);

            notifyLbl.setText("File Downloaded");

            Timer timer = new Timer(5000, e -> notifyLbl.setText(""));
            timer.setRepeats(false);
            timer.start();
        }
    } catch (SocketException ex) {
        Logger.getLogger(ClientGUI.class.getName()).log(Level.SEVERE, null, ex);
    } catch (UnknownHostException ex) {
        Logger.getLogger(ClientGUI.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(ClientGUI.class.getName()).log(Level.SEVERE, null, ex);
    }
}                                           

public boolean validateUsername(String username) {
    username = username.trim();

    if (username == null || username.equals("")) {
        return false;
    }

    if (!username.matches("[a-zA-Z]*")) {
        return false;
    }

    return true;
}

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {

    ClientGUI client = new ClientGUI(new Server());
    client.createUserFolder("DownloadedFiles");

    //client.createServerFile("serverFile");

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new ClientGUI().setVisible(true);
        }
    });
}

// Variables declaration - do not modify                     
private javax.swing.JLabel connectionLbl;
private javax.swing.JButton createFile;
private javax.swing.JButton downloadBtn;
private javax.swing.JTextField downloadFileNameTxt;
private javax.swing.JTextField fileNameTxt;
private javax.swing.JTextField hostTxt;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JPanel jPanel1;
private javax.swing.JButton logOffBtn;
private javax.swing.JButton loginBtn;
private javax.swing.JLabel notifyLbl;
private javax.swing.JTextField passwordTxt;
private javax.swing.JTextField portTxt;
public javax.swing.JButton uploadBtn;
private javax.swing.JTextField usernameTxt;
// End of variables declaration                   

}

Server.java

  public class Server implements ActionListener {
     JButton button = new JButton();
     public static void main(String[] args) {

    ClientGUI client = new ClientGUI();
    client.createUserFolder("ServerFolder");   

    Server server = new Server();      
    server.button = client.getButton();

    int serverPort = 7;    // default port
    if (args.length == 1) {
        serverPort = Integer.parseInt(args[0]);
    }
    try {
        // instantiates a datagram socket for both sending
        // and receiving data
        ServerDatagramSocket mySocket = new ServerDatagramSocket(serverPort);
        System.out.println("Server Ready...");          

        while (true) {  // forever loop
            //Login
            DatagramMessage request = mySocket.receiveMessageAndSender();
            System.out.println("201 - Request Received to Login");
            String message = request.getMessage();

            System.out.println("204 - Login Successful - Welcome " + message);
            // Now send the echo to the requestor
            mySocket.sendMessage(request.getAddress(),
                    request.getPort(), message);                                                                           
            //End Login


   //                 //LogOff
   //                DatagramMessage requestToLogOff = mySocket.receiveMessageAndSender();
   //                System.out.println("\n401 - Request Received to Log off");
   //                String response = requestToLogOff.getMessage();
   //
   //                System.out.println("402 - Log off Successful - Goodbye " + response);
   //                // Now send the echo to the requestor
   //                mySocket.sendMessage(request.getAddress(),
    //                        request.getPort(), response);                                                                           
     //                //End LogOff




   //                //Upload
  //                System.out.println("\n304 - Upload Requested...");             
    //                byte[] receiveData = new byte[MAX_LEN];
    //                byte[] sendData = new byte[MAX_LEN];
   //                DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
    //                mySocket.receive(receivePacket);
   //
 //                String sentence = new String(receivePacket.getData());
    //                SimpleDateFormat df = new SimpleDateFormat("EEE, MMM d, ''yy");
 //
   //                File moddedFile = new File("C:\\ServerFolder\\");
  //
 //                mySocket.sendMessage(request.getAddress(), request.getPort(), "Last upload on " + df.format(moddedFile.lastModified()));
   //                System.out.println("305 - Last upload on " + df.format(moddedFile.lastModified()));
   //                System.out.println("306 - Recieved Data: " + sentence);
    //
 //                InetAddress IPAddress = receivePacket.getAddress();
  //                int port = receivePacket.getPort();
  //                String capitalizedSentence = sentence.toUpperCase();
 //                sendData = capitalizedSentence.getBytes();
   //                DatagramPacket sendPacket
     //                        = new DatagramPacket(sendData, sendData.length, IPAddress, port);
   //                mySocket.send(sendPacket);
   //
      //                System.out.println("\n307 - File Recieved and ready for upload...");
   //                Writer writer = null;
      //
     //                String todaysDate = df.format(new Date());
 //                             
      //                writer = new BufferedWriter(new OutputStreamWriter(
    //                        new FileOutputStream("C:\\ServerFolder\\" + message.trim() + "\\" + todaysDate + ".txt"), "utf-8"));
 //                writer.write(sentence);
 //                System.out.println("308 - File upload complete!");
   //                writer.close();
     //                
  //                //End Upload  


            //Start Download
             client.createServerFile();
             System.out.println("\n504 - Download Requested..."); 
             File downloadFolder = new File("C:\\ServerFolder\\serverFile.txt");
             String myFile = null;

                 BufferedReader reader = new BufferedReader(new FileReader(downloadFolder));
                 StringBuilder sb = new StringBuilder();
                 String line = reader.readLine();                 
                 while(line != null)
                 {
                     sb.append(line);
                     sb.append(System.lineSeparator());
                     line = reader.readLine();                         
                 }     
                  myFile = sb.toString();

                 mySocket.sendMessage(request.getAddress(), request.getPort(), myFile + "\n\n501 - Download Complete");
                 //System.out.println("\n508 - Download Requested..."); 
                 JOptionPane.showMessageDialog(null, "File download complete!");  
                  System.out.println("508 - File download complete!"); 
              //End Download


        } //end while  

    } // end try       
    catch (Exception ex) {
        ex.printStackTrace();
    } // end catch     
}//end main

@Override
public void actionPerformed(ActionEvent e) {       
    if(button.getModel().isPressed())
    System.out.println("the button is pressed");
}




 } // end class      
marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
Aleksandar Zoric
  • 1,343
  • 3
  • 18
  • 45
  • Hopefully you have already read the canonical NullPointerException (NPE) question and its detailed answer. So presuming that you've done so, you should know the importance of the stack trace and the line that throws the exception. Please show the stacktrace, please indicate which lines are involved. – Hovercraft Full Of Eels Nov 08 '16 at 22:45
  • [canonical NullPointerException question link](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – Hovercraft Full Of Eels Nov 08 '16 at 22:46
  • Will take a look into NPE now. Not sure really how to show a stack trace, will research and upload it. – Aleksandar Zoric Nov 08 '16 at 22:50
  • It's a moot point now since I now know the reason for your problem and its solution, but in the future, do study the most common questions that correlate with your error, since you'll usually then be able to solve it yourself from the information gained. In the future, when you have a NPE, study the stacktrace which tells you the lines involved. Knowing this, you'll know which fields are null, and knowing that you'll know that their initialization code was never called, and knowing that, you'll know that initComponent is never called and can figure out why. – Hovercraft Full Of Eels Nov 08 '16 at 22:53

1 Answers1

1

You're not calling initComponents() when you use the constructor that takes an ActionListener parameter, and so none of the components get initialized and all remain null. So change this:

public ClientGUI(ActionListener listen)
{
    uploadBtn.addActionListener(listen);
}

to this:

public ClientGUI(ActionListener listen)
{
    this(); // call the default constructor first which calls initComponents.
    uploadBtn.addActionListener(listen);
}

or you could call initComponents directly:

public ClientGUI(ActionListener listen)
{
    initComponents();
    uploadBtn.addActionListener(listen);
}

But I don't like this second solution as well, since if you put other initialization code in the default constructor, you'll need to call that explicitly in both constructors.

Hovercraft Full Of Eels
  • 283,665
  • 25
  • 256
  • 373
  • Ah I see. Will take a look now and give it a shot. Thank you. – Aleksandar Zoric Nov 08 '16 at 22:50
  • That worked and I no longer get the nullPointerException. But now it seems that the actionPerformed() in the server class is not being executed when I click the upload button. Am I checking that the button is clicked correctly in that method? – Aleksandar Zoric Nov 08 '16 at 22:55
  • @AleksandarZoric: that's a completely separate problem, but why **would** you expect it to be pressed in the server. The actual client that's being run is no where near your server class. Your overall design looks to be broken. – Hovercraft Full Of Eels Nov 08 '16 at 22:56
  • Right. Will take further look regarding the design. Thanks for the help. – Aleksandar Zoric Nov 08 '16 at 23:05