Problema del constructor: la lista real y formal difieren en longitud

Mi problema es que tengo dos clases, la primera es la clase de implementación que implementa Runnable y la segunda es interfaceView que amplía la vista de fotogramas

pero cuando trato de hacer un objeto de interfaceView en la clase de implementación, por ejemplo

interfaceview check1 ;
check1.get_sms_validation();

me da

java.lang.IllegalArgumentException: aplicación nula

excepción

El código para la clase de implementación es

pero cuando lo hago

interfaceview check1 = new interfaceview () ;
  check1.get_sms_validation();

me dice que haga un constructor en la clase interfaceview y cuando lo hago me da error

La lista real y la formal difieren en longitud.

el código de mi clase de implementación es

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package smsapp;
import java.io.*;
import java.net.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import org.smslib.GatewayException;
import org.smslib.TimeoutException;
import org.smslib.modem.*;
import org.smslib.InboundMessage;
import org.smslib.OutboundMessage;
import org.smslib.Service;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Random;
import org.jdesktop.application.SingleFrameApplication;
/**
 *
 * @author ist
 */
public class Implementation implements Runnable {


    private boolean login;
    public static Service srv;
    public static OutboundMessage outMsg;
    public static String defaultPort="COM7";
    public static ArrayList<OutboundMessage> queuedMessages = new ArrayList<OutboundMessage>();
    static QueueSendingNotification queueSendingNotification = new QueueSendingNotification();
    private boolean phoneConnected;
    Thread t;
    String msg ="1";
    public String Data_For_File ;
    public  String messageFor_File = null;
    public int check = 0;
    Random generator;
    public String message;
    private SingleFrameApplication SingleFrameApplication;
   // private String messageFor_File1;
    public String messageFor_File1 = null;
//   public InterfaceView = new InterfaceView ();

    Implementation()
    {
        phoneConnected = false;
    }

    public boolean connectPhone(String comPort)
    {
        try
        {

            srv = new Service();
            SerialModemGateway gateway = new SerialModemGateway("Modem 0", comPort, 9600, "", "");
            gateway.setInbound(true);
            gateway.setOutbound(true);
            gateway.setSimPin("0000");
            srv.addGateway(gateway);

        }
        catch(Exception e)
        {
             System.out.println("Could Not connect to the Modem. Please try again.\n");

        }
        this.phoneConnected = true;
        return true;
    }

    public boolean startService()
    {
        try
        {
            if(phoneConnected)
            {
                srv.startService();
                t = new Thread(this);
                t.start();
                generator  = new Random( 19580427 );
            }
            else
            {
                return false;
            }
        }
        catch(Exception e)
        {
             try
             {
                 System.out.println("Service Start Error ");
                 e.printStackTrace();
                 srv.stopService();
                 return false;
             }catch(Exception ee)
             {
                 System.out.println("Service Stop Error");
                 e.printStackTrace();
                return false;

             }
        }
        srv.setOutboundNotification(queueSendingNotification);
//        myTimer = new Timer (10000,runProcess);
//        myTimer.setInitialDelay(0);
//        myTimer.start();
        return true;
    }

    public boolean stopService()
    {
        try
        {
            srv.stopService();
            t.stop();
        }catch(Exception e)
        {
            System.out.println("There was an error in disconnecting.");
            e.printStackTrace();
            return false;
        }
        return true; 
    }

    public void run()
    {
       // processOutMessage("1");
      //  processOutMessage();

        while (true)
        {
//            System.out.println(alpha++);
            InterfaceView.statusMessageLabel.setText("Checking inbound messages");
            try {
                //            System.out.println("Checking inbound messages");
                            readMessages();



            } catch (FileNotFoundException ex) {
                Logger.getLogger(Implementation.class.getName()).log(Level.SEVERE, null, ex);
            }
            InterfaceView.statusMessageLabel.setText("Processing messages");
//            System.out.println("Checking outbound messages");
        //    processMessages();
            InterfaceView.statusMessageLabel.setText("Checking outbound messages");
//            System.out.println("Checking outbound messages");
          //  sendMessages();
            InterfaceView.statusMessageLabel.setText("Waiting ... ");
            try {
                readMessages();
            } catch (FileNotFoundException ex) {

                Logger.getLogger(Implementation.class.getName()).log(Level.SEVERE, null, ex);
            }
            try
            {
                t.sleep(5000);
            } catch (InterruptedException e) {System.out.println("Thread Pause Exception");}
        }
    }

    static class QueueSendingNotification implements org.smslib.IOutboundMessageNotification
    {

        public void process(String gtwId, OutboundMessage msg)
        {
            try {
                System.out.println("Sent Message from: " + gtwId + " , " + msg.getId());
                queuedMessages.remove(msg);
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    }

    public void readMessages() throws FileNotFoundException
    {
        int check_Lenght = 0;

        if (srv.getServiceStatus() == Service.ServiceStatus.STARTED)
        {
            try{
                System.out.print ("\n\n\n\n\n" + "in the print block of above the interfaceview declaration");
                 InterfaceView check1 = new InterfaceView(SingleFrameApplication);
                InboundMessage msg = null;
                java.util.LinkedList<InboundMessage> list = new java.util.LinkedList<InboundMessage>();
                srv.readMessages(list, InboundMessage.MessageClasses.UNREAD);
                for (int i = 0; i < list.size(); i++)
                {

                    msg = list.get(i);

                    //TODO: submit the incoming messages to the database from this point. 
                    System.out.println("New incoming message from: " + msg.getOriginator() +" : \t" + msg.getText() + "\n");
                    saveSMS(msg.getOriginator(),msg.getText());
                    messageFor_File = msg.getText();

                    // Concatination of data
                    if (! messageFor_File.equals("Y"))     {           
                      Data_For_File = messageFor_File +  Data_For_File ;
                      check_Lenght = Data_For_File.length();
                     System.out.print("The Value for Data For File" + messageFor_File );

                          if (check_Lenght >= check){
                              System.out.println("\n\n\n" + "I am in x " );
                              DataPacketing call = new DataPacketing();
                              call.Write_To_File(Data_For_File);
                             }
                                 //put the message into database.
                               srv.deleteMessage(msg);

                    }
                    else 
                    {

                    messageFor_File1 = messageFor_File;
                    srv.deleteMessage(msg);
                    Read_Message_Notification ();



                    }
                }

            }

            catch(Exception e)

            {
                e.printStackTrace();
            }



        }

    }

    private void saveSMS(String originator, String text)
    {

        try
        {


        } catch (Exception e) {
            e.printStackTrace();
        }

    }


    public void processOutMessage(String sms)
    {
        try
        {
          // outMsg = new OutboundMessage ("03456305252", sms);
           // outMsg = new OutboundMessage ("03219409778", sms);
            outMsg = new OutboundMessage ("03456305252", sms);
            outMsg.setId("1");
            queuedMessages.add(outMsg);
            srv.queueMessage(outMsg);

            msg=msg+1;
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

public String Read_Message_Notification () throws TimeoutException {

 // int check_Lenght;
 //String messageFor_File1 = "";



   System.out.println(messageFor_File1);

return   messageFor_File1;
}

}

Y el código de mi clase InterfaceView es

/*
 * InterfaceView.java
 */

package smsapp;

import java.io.IOException;
import java.util.logging.Level;
import org.jdesktop.application.Action;
import org.jdesktop.application.ResourceMap;
import org.jdesktop.application.SingleFrameApplication;
import org.jdesktop.application.FrameView;
import org.jdesktop.application.TaskMonitor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.Timer;
import javax.swing.Icon;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import org.smslib.InboundMessage;
import org.smslib.TimeoutException;
import org.smslib.helper.*;


/**
 * The application's main frame.
 */

public class InterfaceView extends FrameView {



     private final String s = null;
    public String fileName;
    public String filePath;
    public float fileLength;
    public int No_Of_SMS;
    public String check = "N";
    public  DataPacketing [] Packets_Array  = null;
    public  DataPacketing start  = new DataPacketing ();
    public SingleFrameApplication app1 = new SingleFrameApplication ()
          {

       @Override
       protected void startup() {
           throw new UnsupportedOperationException("Not supported yet.");
       }
   };


    private void customizations()
    {


    private void botton_startServiceMouseClicked(java.awt.event.MouseEvent evt) {                                                 
        if (!this.botton_startService.isEnabled())
            return;
        javax.swing.JInternalFrame j = new javax.swing.JInternalFrame();
            JOptionPane.showMessageDialog(j ,
                    "Please wait while the service is being connected.",
                    "Starting Server!",
                    JOptionPane.PLAIN_MESSAGE);
        if (instance.startService()) {
            j = new javax.swing.JInternalFrame();
            JOptionPane.showMessageDialog(j ,
                    "Service Started Successfully.",
                    "Service Started",
                    JOptionPane.INFORMATION_MESSAGE);
            this.botton_startService.setEnabled(false);
            this.botton_connectPhone.setEnabled(false);
            this.botton_stopService.setEnabled(true);
        } else {
            j = new javax.swing.JInternalFrame();
            JOptionPane.showMessageDialog(j ,
                    "Service could not be started. Please connect the phone and try again.",
                    "Service Start Error",
                    JOptionPane.ERROR_MESSAGE);
            this.botton_connectPhone.setEnabled(true);
        }
    }                                                

    private void botton_connectPhoneMouseClicked(java.awt.event.MouseEvent evt) {                                                 
        if (!this.botton_connectPhone.isEnabled())
            return;
        if (!(instance.connectPhone(this.comPorts.getSelectedItem().toString()))) {
            javax.swing.JInternalFrame j = new javax.swing.JInternalFrame();
            JOptionPane.showMessageDialog(j ,
                    "Phone could not be connected. Please check the ports and try again.",
                    "Phone Connection Error",
                    JOptionPane.ERROR_MESSAGE);
        }
        //this.botton_connectPhone.setEnabled(false);


    }                                                

    private void formPropertyChange(java.beans.PropertyChangeEvent evt) {                                    
        if (!(instance.connectPhone(instance.defaultPort) && (instance.startService())))
        {
            this.botton_connectPhone.setEnabled(true);
            this.botton_startService.setEnabled(true);
            this.botton_stopService.setEnabled(false);         

        }      

    }                                   

    private void SelectFileActionPerformed(java.awt.event.ActionEvent evt) {                                           
        // TODO add your handling code here:
        JFileChooser chooser = new JFileChooser();
        chooser.showOpenDialog(null);
        File f = chooser.getSelectedFile();
        fileName = f.getName();
        filePath = f.getPath();
        fileLength = f.length();
       // System.out.println("You have chosen: " + fileName+"\n from the path: "+filePath+"\n of the length: "+fileLength+" KB");         

        //------------------------------------- Calculating the Number Of SMS Required from the File Size

        float temp = fileLength/120;
        No_Of_SMS = (int) Math.ceil(temp);

        String SMS = " "+No_Of_SMS+" SMS";         
        SmsRequired.setText(SMS);
        String size2 = " "+fileLength+" KB";       
        FileName.setText(fileName);
        FileSize.setText(size2);

        this.FileName.setVisible(true);
        this.FileSize.setVisible(true);
        this.SmsRequired.setVisible(true);       
        this.jLabel3.setVisible(true);
        this.jLabel4.setVisible(true);
        this.jLabel6.setVisible(true);
        DataPackets.setText(" InterKnot:\\"+filePath);

        try {
            Packets_Array  =   start.Driver(fileName,filePath,fileLength,No_Of_SMS);
        } catch (IOException ex) {
            java.util.logging.Logger.getLogger(InterfaceView.class.getName()).log(Level.SEVERE, null, ex);
        }       
        this.DataPackets.setVisible(true);

      //  DataPacketing setFile = new DataPacketing();
      //setFile.File_Name_Path(fileName, filePath);


}                                          

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

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

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

     //  DataPacketing [] Packets_Array  = null;
      // DataPacketing start  = new DataPacketing ();
         System.out.println("I am not yet in if");
        String s = null; 
         if(check.equals("N")){
        System.out.println("Do i Come here ????");
             try {
        //InboundMessage userNo = null;
            //String info = "User: " +  "wants to share file :"+ FileName+ " of size: "+FileSize+ "with you.To allow Reply Y";
                 String newInfo = "User Wants to share a file with you. To allow reply Y";
                System.out.println("\n\n\n\n\n" + newInfo);
                message1.processOutMessage(newInfo);

                         System.out.print("\n\n\n\n\n\n" + "I am In try to check for the read notification message");

                          }catch (Throwable t) {
                               System.out.println("The Exception" + t);

                  }

             Implementation check1 = new Implementation ();
            try {


                check = check1.Read_Message_Notification();


            } catch (TimeoutException ex) {

                java.util.logging.Logger.getLogger(InterfaceView.class.getName()).log(Level.SEVERE, null, ex);
            }



        if (check.equals("Y")){


        //  --------------------------------------------converting String Array into String


        StringBuffer result = new StringBuffer();

        //  -------------------------------------------- LOOP to send WHOLE file 

        for(int i=0; i<Packets_Array.length; i++)
        { 

                String s1 = Packets_Array[i].Data_Segment;
                System.out.println(s1);
                message1.processOutMessage(s1);
        }                

        //  -------------------------------------------- To send First Packet of file

        }


         }


        else
        {

        System.out.println("The User Refused to Allow the Transfer");

        }
    }                                               

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

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

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

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

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

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

    // Variables declaration - do not modify                     
    private javax.swing.JTextField DataPackets;
    private javax.swing.JTextField FileName;
    private javax.swing.JTextField FileSize;
    private javax.swing.JLabel PicGlobe;
    private javax.swing.JButton ReadandSendFile;
    private javax.swing.JButton SelectFile;
    private javax.swing.JTextField SmsRequired;
    private javax.swing.JButton botton_connectPhone;
    private javax.swing.JButton botton_startService;
    private javax.swing.JButton botton_stopService;
    public static javax.swing.JComboBox comPorts;
    private javax.swing.JFileChooser jFileChooser1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel12;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel5;
    private javax.swing.JProgressBar jProgressBar1;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JPanel mainPanel;
    private javax.swing.JMenuBar menuBar;
    public static javax.swing.JLabel statusMessageLabel;
    public static javax.swing.JLabel statusMessageLabel1;
    private javax.swing.JPanel tab_settings;
    // End of variables declaration                   
    Object table_keywords_columns[] = { "Keyword",  "Reply Text"};
    Object table_outgoingSMS_columns[] = { "Number",  "Text", "Time"};
    Object table_incomingSMS_columns[] = { "Number",  "Text", "Time", "Auto-Reply Keyword"};
    private final Timer messageTimer;
    private final Timer busyIconTimer;
    private final Icon idleIcon;
    private final Icon[] busyIcons = new Icon[15];
    private int busyIconIndex = 0;
    private Implementation instance; 
    private JDialog aboutBox;
    public Implementation message1 = new Implementation();
    JProgressBar progressBar;

   void messagecheck(){
   System.out.print ("\n\n\n\n\n\n\n" + "I am in the message code of the interfaceview class");



   }


}

Qué hacer ?

preguntado el 03 de mayo de 12 a las 09:05

¿Puedes mostrarnos tus clases? -

@Nick, he agregado el código de mis dos clases en la pregunta nuevamente. -

¿En qué parte del código obtienes la NullPointerException? donde llamas check1.get_sms_validation(); ? -

3 Respuestas

Su primer ejemplo falla porque no ha asignado nada a la variable, por lo que es null y obtienes un NullPointerException.

Tu segundo ejemplo falla porque la función constructora espera argumentos y no los estás proporcionando. Tienes que mirar el interfaceview constructores de la clase y proporciona los argumentos relevantes.

Por ejemplo, si interfaceviewEl único constructor de se veía así:

public interfaceview(String foo) {
   // ...
}

...entonces para crearlo, tendrías que proporcionar un String:

interfaceview check1 = new interfaceview("Some string here");

Creo que probablemente sería útil dar un paso atrás y trabajar con algunos tutoriales de Java (no hay escasez de ellos por ahí). Además, solo por lo que vale, normalmente en las interfaces y clases de Java se escriben en camelCase con tapa inicial, por ejemplo InterfaceView más bien que interfaceview. Puede ignorar esa convención si lo desea, pero seguirla hace que el código sea mucho más claro para los demás.

contestado el 03 de mayo de 12 a las 09:05

lo hice pero ahora me da la excepción java.lang.IllegalArgumentException: aplicación nula en org.jdesktop.application.View. (View.java:79) en org.jdesktop.application.FrameView. (FrameView.java:23) - user1318860

El primer error causado por check1 no está inicializado, por lo que obtuvo un error de punto nulo. El segundo error causado por la interfaz no se puede new en jave, necesita tener una llamada normal para implementar la interfaz.

contestado el 03 de mayo de 12 a las 09:05

Is interfaceview una clase de interfaz? Java no permite crear una instancia a partir de una clase de interfaz. - user1335794

llama InterfaceView check1 = new InterfaceView(SingleFrameApplication); para crear una instancia, pero no tiene este constructor en su InterfaceView clase. - user1335794

Yo sé eso. El problema es que cuando trato de hacer ese constructor, no me deja hacerlo, me da este error. El constructor FrameView en la clase org.jdesktop.application.FrameView no se puede aplicar a los tipos dados; requerido: org.jdesktop.application.Application encontrada: sin argumentos motivo: las listas de argumentos reales y formales difieren en longitud - user1318860

el error es muy claro, FrameViewEl constructor necesita un Application, pero en tu InterfaceViewconstructor de , le pasas un SingleFrameApplication, asi que FrameViewLa inicialización de es fallida. - user1335794

Lo siento, soy muy malo en eso. No entendí lo que quieres decir con aplicación aquí. - user1318860

control de vista de interfaz1; comprobar1.get_sms_validation();

Le dará una NullPointerException porque no se ha inicializado.

vista de interfaz check1 = nueva vista de interfaz (); comprobar1.get_sms_validation(); me dice que haga un constructor

Lo más probable es que haya un constructor que ya esté allí y que no esté utilizando.

La lista real y la formal difieren en longitud.

No está utilizando el constructor que cree que es.

contestado el 03 de mayo de 12 a las 09:05

estoy usando el que hice porque el otro constructor está tomando un argumento. - user1318860

Esto significa que tienes que darle un argumento cuando lo llamas. - pedro laurey

¡incluso si le doy un argumento, todavía me da el error nulo! - user1318860

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.