Swt

Sou novo no fórum e estou desenvolvendo uma aplicação em SWT, conforme código abaixo. O problema que ao criar nova solicitação (classe CmdCadSolicitacao) além de não executar trás a seguinte mensagem de erro:

Exception in thread “main” java.lang.IllegalArgumentException: Argument cannot be null

Sei que é um dúvida bem básica, mas não estou conseguindo resolver. O código é um pouco extenso. Desde já agradeço a atenção de todos.

import java.sql.SQLException;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.graphics.Color;

import br.com.xxxxxx.siscof.cadastrosolicitacao.CadastroSolicitacao;

public class Principal
{
    Display disPrincipal = Display.getDefault();  //  @jve:decl-index=0:
    Shell shlPrincipal = new Shell( disPrincipal, SWT.MIN | SWT.MAX | SWT.CLOSE );
    Composite cpsPrincipal = new Composite( shlPrincipal, 0 );

    /**
     * This method initializes sShell
     * @throws SQLException 
     */
    public void inicia() throws SQLException
    {
	shlPrincipal = new Shell();
	shlPrincipal.setText( new Constantes().tituloAplicacao() );
	shlPrincipal.setImage( new Image(Display.getCurrent(), getClass().getResourceAsStream( "/br/com/xxxxxx/siscof/icones/LogoPetro.PNG" )) );
	shlPrincipal.setBackground( new Color( Display.getCurrent(), 172, 189, 208 ) );
	shlPrincipal.setSize( new Point(300, 200) );
	shlPrincipal.setMaximized( true );
	shlPrincipal.setMenuBar( new TlbPrincipal().montarMenu( shlPrincipal, SWT.BAR ) );
	shlPrincipal.setParent( cpsPrincipal );
	shlPrincipal.open();
	
	while ( !disPrincipal.isDisposed() )
	{
	    if ( !disPrincipal.readAndDispatch() )
	    {
		disPrincipal.sleep();
	    }
	}
	Display.getDefault().dispose();
    }
}
import java.sql.SQLException;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;

import br.com.xxxxxx.siscof.comandos.CmdCadSolicitacao;

public class MnuSolicitacaoNova
{
    public MnuSolicitacaoNova(Menu mnuSistemaNovo, int push) throws SQLException
    {
	boolean resultado = new CmdCadSolicitacao().verificaPermissao();
	
	MenuItem mnuSolicitacaoNova = new MenuItem(mnuSistemaNovo, SWT.PUSH);
	mnuSolicitacaoNova.setText("Chamado");
	mnuSolicitacaoNova.setImage(new Image(Display.getCurrent(), getClass().getResourceAsStream("/br/com/xxxxxx/siscof/icones/tarefa.png")));
	mnuSolicitacaoNova.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter()
	{
	    public void widgetSelected(org.eclipse.swt.events.SelectionEvent e)
	    {
		try
		{
		    new CmdCadSolicitacao().executaComando();
		}
		catch (SQLException e1)
		{
		    e1.printStackTrace();
		}
	    }
	});
	
	if (resultado == false)
	{
	    mnuSolicitacaoNova.setEnabled(false);	    
	}
    }
}
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;

import br.com.xxxxxx.siscof.cadastrosolicitacao.CadastroSolicitacao;
import br.com.xxxxxx.siscof.conexaobd.ConexaoBd;
import br.com.xxxxxx.siscof.principal.Constantes;

public class CmdCadSolicitacao
{
    /**
     * Nome da ação a ser checada na base de dados
     */
    public final String COMANDO = "cadastraSolicitacao";
    /**
     * SQL para busca da ação na base dados
     */
    String sql = "Select Count(PK_PERM) From PERMISSOES" +
	    " Where ((PERM_DT_EXCLUSAO) Is Null) and FK_FUNC='" + COMANDO +
	    "' and PERM_CD_CHAVE_FAVORECIDO ='" + System.getProperty("user.name") + "'";
    /**
     * Resultado da checagem de permissão (falso ou verdadeiro)
     */
    boolean resultado = false;
    
    /**
     * Faz checagem junto a base de dados da permissão de execução da classe 
     * retornará false ou true
     */
    public boolean verificaPermissao() throws SQLException
    {
	Connection con = null;
	Statement stm = null;
	ResultSet rs = null;
	
	try
	{
	    new ConexaoBd();
	    con = ConexaoBd.getCon();
	    stm = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
	    rs = stm.executeQuery(sql);
	    rs.last();
	    
	    if (rs.getRow() > 0)
	    {
		resultado = true;
	    }
	    else
	    {
		resultado = false;
	    }
	}
	catch (SQLException e)
	{
	    e.printStackTrace();
	}
	finally
	{
	    //Fecha conexão com a base de dados
	    rs.close();
	    stm.close();
	    //Utilizado null ao contrário de .close() devido a bug na JVM instalada na máquina do desenvolvedor
	    con = null;
	}	
	
	return resultado;
    }
    
    /**
     * Executa ação abrir nova solicitação caso haja permissão para isso
     * retornará void
     * @return 
     */
    public void executaComando( ) throws SQLException
    {
	Composite cpsPrincipal = null;
	verificaPermissao();
		
	if (resultado == true)
	{
	    //Abre frame Cadastro de solicitação
	    new CadastroSolicitacao( cpsPrincipal, 0 );
	    
	}
	else
	{
	    //Retorna mensagem de falta de permissão para execução da ação
	    MessageBox msg = new MessageBox(new Shell(), SWT.ICON_ERROR | SWT.OK);
	    msg.setText(new Constantes().tituloAplicacao());
	    msg.setMessage(new Constantes().mensagemPermissao() + COMANDO + 
		    new Constantes().contatoAdministrador());
	    msg.open();
	}
    }
}
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Decorations;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.SWT;

public class CadastroSolicitacao extends Composite
{
    public CadastroSolicitacao( Composite cpsCadastroSolicitacao, int estilo )
    {
	super( cpsCadastroSolicitacao, 0 );
	cpsCadastroSolicitacao.setParent( this );
	initialize();
	Decorations decCadastroSolicitacoes = new Decorations( cpsCadastroSolicitacao, SWT.MAX | SWT.MIN );
        decCadastroSolicitacoes.setLayoutData( new GridData( GridData.FILL_BOTH ) );
        decCadastroSolicitacoes.setLayout( new FillLayout() );
    }

    /**
     * This method initializes this
     * 
     */
    private void initialize()
    {
        this.setBackground( Display.getCurrent().getSystemColor( SWT.COLOR_WHITE ) );
        this.setSize( new Point( 298, 258 ) );
    }
}

Pelo que vi, o erro está aqui:

public void executaComando( ) throws SQLException
    {
	Composite cpsPrincipal = null; //inicializado como null, ok ?
	verificaPermissao();
		
	if (resultado == true)
	{
	    //Abre frame Cadastro de solicitação
	    new CadastroSolicitacao( cpsPrincipal, 0 ); //Ops, passou null !!!

Ou seja, a chamada no construtor de CadastroSolicitacao chama o construtor de Composite (super) e este construtor retorna um Exception in thread “main” java.lang.IllegalArgumentException: Argument cannot be null.

Desta forma, tente iniciar cpsPrincipal com algum valor diferente de null

emanuelCruz

Obrigado pela resposta, mas a intenção deste código é “trazer” a tela CadastroSolicitacao para dentro do Shell Principal, como disse é uma dúvida bem básica, mas estou apanhando por ser SWT. Outra questão é que optei em fazer uma classe para o MenuItem e outra para a “transação” em si.

Alguém pode me ajudar?

Alguém???