Java – Como utilizar a FutureTask, controlando o timeout e status de uma thread

multithreadingFutureTask é uma implementação da interface Future a ser executada numa chamada em paralelo. Sendo possível cancelar a execução de uma tarefa, descobrir se a execução já terminou com sucesso ou erro, entre outras operações.

A FutureTask precisa de uma interface para a implementação de uma execução em paralelo. a Callable é parecida com a interface Runnable, mas esta não retorna nenhum valor, enquanto a Callable deve retornar um valor ao final da execução;

MÉTODOS DO FUTURE:

future.cancel(boolean mayInterruptIfRunning) : Cancela o processamento, passar true para interromper se ela ja está iniciada, ou false para cancelar se ainda nao foi iniciada.
future.get(long timeout, TimeUnit unit)  : Espera a resposta da execução de acordo com timeout.
future.get() : Espera a resposta da execução.
future.isDone() : Verifica se a execução já acabou.
future.isCancelled() : Verifica se o processamento foi cancelado.

Exemplo: Continue reading

Java – Bitwise and Bit Shift Operators

/**
 * Bitwise and Bit Shift Operators
 * 
 * Constantes: move 1bit para casa determinada após '<<' x
 * 
 * Varival i: Recebe uma operaçao OU das constantes pedidas;
 * A -   001
 * B -   010
 * C -   100 (Operacao OU)
 * _________
 * Resp: 111 (i = 111 (ou 7 decimal))
 * 
 * Verificacao das constantes dentro da variavel: 
 * - Realiza uma operaçao AND entre a variavel e a constante, se o valor
 * for diferente de 0, contem a constante dentro da variaval:
 * 
 * Exemplo caso i = A|C;
 * i - 101 
 * C - 100 (Operacao AND)
 * _______
 * Resp: 100 (valor != de 0, entra na condiçao (ou 4 dec))
 *
 * Exemplo caso i = A|C;
 * i - 101 
 * B - 010 (Operacao AND)
 * _______
 * Resp: 000 (valor == de 0, nao entra na condiçao)
 * 
 * @author Guilherme Biff Zarelli e Guilherme Alves Silveira
 */
public class teste2 {

    public static final int A = 1 << 1;
    public static final int B = 1 << 2;
    public static final int C = 1 << 3;

    public static void main(String[] args) {
        //ATRIBUICAO DAS CONSTANTES NA VARIAVAL:
        int i = A | C | B; 
        System.out.println(i);//VALOR DA OPERACAO OU
        
        //VERIFICAÇAO DAS CONSTANTES DENTRO DA VARIAVEL:
        if ((i & A) != 0) {
            System.out.println("CONTEM CONSTANTE A");
        }
        if ((i & B) != 0) {
            System.out.println("CONTEM CONSTANTE B");
        }
        if ((i & C) != 0) {
            System.out.println("CONTEM CONSTANTE C");
        }
    }
}

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

Java – Erro: SSLHandshakeException: …validator.ValidatorException: PKIX path building failed: …SunCertPathBuilderException: unable to find valid certification path to requested target

error sslhandshake

ERROR: SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.

Solução 1:

URL url = new URL("https://exemplo1");
HttpsURLConnection conn1 = (HttpsURLConnection) url.openConnection();

  conn1.setHostnameVerifier(new HostnameVerifier() {
    public boolean verify(String hostname, SSLSession session) {
      return true;
    }
  });

Solução 2: Continue reading

Java / Gson – Convertendo json em lista tipada List (Gson – convert from Json to a typed ArrayList)

gson

O Gson é uma biblioteca Java que pode ser usada para converter objetos Java em sua representação JSON. Ele também pode ser usado para converter uma string JSON em um objeto Java equivalente. Gson pode trabalhar com objetos Java arbitrários, incluindo objetos pré-existentes que você não tem código fonte de. (Gson – Google)

A seguir segue um exemplo de como converter um JSON Array em uma lista de objetos: Continue reading

JAVA/Linux – Configurando JDK no linux – Adicionando JAVA no PATH

java_linux

Faça o Download do JAVA JDK:

http://www.oracle.com/technetwork/pt/java/javase/downloads/index.html

Extraia o arquivo baixado para sua pasta de preferência (exemplo: /opt/java_xxxx)

Opcional: Por costume e em caso de atualização do java, para não precisar mudar minhas configurações eu crio um link simbólico para referenciar a ultima versão do java:

$ ln -s /opt/java_xxxx /opt/java_jdk/

Para configurar o PATH, JAVA_HOME, CLASSPATH e MANPATH edite o arquivo:

$ sudo gedit /etc/profile

Adicione as seguintes linhas no topo do arquivo:

#JAVA
export JAVA_HOME=/opt/java_jdk
export CLASSPATH="$JAVA_HOME/lib"
export PATH="$PATH":"$JAVA_HOME/bin"
export MANPATH=/usr/local/man:/usr/man:"$JAVA_HOME/man"

Java – Como Retornar o ID do registro inserido de uma tabela (Get Autoincrement value after INSERT query in MySQL)

O método abaixo fica responsável em retornar o id autoincrement do registro inserido de uma tabela:

.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
  if (stm.executeUpdate() > 0) {
     ResultSet rs = stm.getGeneratedKeys();
     if (rs.next()) {
        return rs.getInt(1);
     }
}

Android / Java – Como calcular distância entre dois pontos GPS

Android-Apps-GPS-Location-Tmobile-G1

Segue o método responsável pelo calculo, basta passar as duas coordenadas, latitude e longitude origem e destino. O retorno será em metros.

private double calculaDistancia(double lat1, double lng1, double lat2, double lng2) {
	//double earthRadius = 3958.75;//miles
	double earthRadius = 6371;//kilometers
	double dLat = Math.toRadians(lat2 - lat1);
	double dLng = Math.toRadians(lng2 - lng1);
	double sindLat = Math.sin(dLat / 2);
	double sindLng = Math.sin(dLng / 2);
	double a = Math.pow(sindLat, 2) + Math.pow(sindLng, 2)
			* Math.cos(Math.toRadians(lat1))
			* Math.cos(Math.toRadians(lat2));
	double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
	double dist = earthRadius * c;

	return dist * 1000; //em metros
}

Java – Problemas na execução de procedure (java.sql.SQLException: Parameter number X is not an OUT parameter)

java linux tux
- Problemas ao executar procedure no Java.
- Parameter number x is not an OUT parameter.
- Java procedure execute registerOutParameter

Atualmente me ocorreu um erro ao executar uma procedure com retorno, abaixo segue como foi realizado a chamada:

String sqlString = "{CALL pr_teste(?,?)}";

CallableStatement sqlStm = connection.prepareCall(sqlString);

sqlStm.setString(1, usuario);
sqlStm.registerOutParameter(2, Types.INTEGER);
sqlStm.execute();

O erro que retornou no printstack foi:

java.sql.SQLException: Parameter number 2 is not an OUT parameter
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
    at com.mysql.jdbc.CallableStatement.checkIsOutputParam(CallableStatement.java:690)
    at com.mysql.jdbc.CallableStatement.registerOutParameter(CallableStatement.java:1881)
    at com.mysql.jdbc.CallableStatement.registerOutParameter(CallableStatement.java:1890)
    at com.isb.igt.database.StoredProcedures.preparationCalls(StoredProcedures.java:40)
    at com.isb.igt.database.StoredProcedures.main(StoredProcedures.java:236)

A procedure implementada foi definida da seguinte maneira: Continue reading

Eclipse – Como configurar o atalho CTRL+TAB para navegar entre tabs

eclipse_ctrl+tab+atalho

Bem vindo ao Eclipse, pera aí… Ctrl+TAB não funciona? como vou navegar entre as tabs? (decepção total). No Eclipse esse atalho é chamado de Next Editor, é dado pela combinação das teclas ctrl+f6. Para alterarmos vamos realizar os procedimentos abaixo:

  • Acesse a opção Window na barra de menu e escolhaPreferences;
  • Depois abra a opção General e selecione Keys;
  • Em uma pequena caixa de texto abaixo da combobox de seleção de Scheme, substitua ‘type filter text’ por ‘Next Editor’;
  • Selecione a opção mostrada na lista de resultados (Next Editor);
  • Logo abaixo, na caixa de texto Bindings, apague a combinação pré-existente (Ctrl+F6) e execute a combinação de teclas desejada (suponho que seja ‘Ctrl+Tab’);
  • Você também pode querer alterar a combinação para voltar à aba anterior, para tal, opós modificar a configuração para ‘Next Editor’, escreva ‘Previous Editor’ na caixa de texto de procura;
  • Novamente selecione o resultado na lista e substitua a combinação de teclas apresentada por uma de sua preferência (eu sugiro ‘Ctrl+Shift+Tab’);
  • Depois de tudo configurado, clique sobre o botão Apply e depois em OK;

Fonte: http://goo.gl/r0NsvV

Java – Conversão de base numérica (Binário / Decimal / Octal / Hexa)

conversao base

Conversão de base numérica é o nome dado à passagem de um valor de uma base para outra mantendo o valor quantitativo, mas alterando a simbologia para se adequar a nova base. (Conversão de base numérica – Wikipedia).

Nos exemplos abaixo, vamos demostrar como converter as bases programaticamente utilizando o Java: Continue reading