terça-feira, 20 de dezembro de 2016

segunda-feira, 19 de dezembro de 2016

Java: Valores Máximos e Mínimos de um JSpinner

Estava trabalhando com Spinner e precisava limitar o valor mínimo e máximo. Entretanto o Spinner é uma interface genérica e possui alguns tipos específicos de Spinner. Vou mostrar como é possível definir.

sexta-feira, 16 de dezembro de 2016

Java: JProgressBar - Mostrando Porcentagem

Algo mais simples, mas que pode ser bom para consultar: vamos ver como mostrar a porcentagem do ProgressBar. Para isso é algo bem simples: ative a propriedade stringPainted.

seuJProgressBar.stringPainted(true);

E o interessante é que nem precisa definir string ou nada, pois por padrão já mostra a porcentagem.

quinta-feira, 15 de dezembro de 2016

Java: Validar URL (Gambiarra? Ou não?)

Um dos desafios no Java que encontrei foi a de validar URL. Ok, antes que fale "use a biblioteca do Apache", no meu caso, era um que não era viável, precisava ser Java puro, sem bibliotecas externas. Entretanto, validar a URL, como disse, não é fácil. Um bom validador de URL tem um RegExp enorme se for seguir as normas, e os RegExp mais simples, acabam rejeitando muitas URL válidas (a maioria se esquece que nem todos os sites são .com, .net ou .org, mas que também existe o .co, entre outras).

quarta-feira, 14 de dezembro de 2016

Java: Verificando se o Sistema Operacional é 32 ou 64 bits no Windows

Outro caso que se assemelha ao anterior é verificar se o sistema operacional é 32 ou 64 bits. O Java possui um comando que é o "System.getProperty("os.arch")", mas existe um problema nele: ele verifica se a máquina virtual é 32 ou 64bits, mas não o sistema em si. O que isso significa? Significa que eu posso ter um sistema 64 bits rodando um JVM de 32 bits, e nesse caso, o comando vai retornar 32 bits.
Mas como posso resolver esse problema? Novamente, vamos requisitar na linha de comando do Windows. Vejo o código abaixo:

terça-feira, 13 de dezembro de 2016

Java: Verificando se o programa tem acesso de administrador no Windows

Precisando programar um automatizador para instalar um certo programa, eu preciso certificar que o usuário está rodando o instalador com acesso privilegiado, rodar como administrador. O problema é que muitas informações do JAVA não está 100% correto. Ele te dá informações sobre a máquina virtual, mas não do sistema em si, e são poucas informações reais que te ele te dá. Uma delas é o que acabei de dizer, se o programa está rodando com privilégios de administrador: eu posso ver se um usuário é administrador, mas não se o programa tem tal privilégio. Para resolver o problema, achei várias abordagens, a maioria consistia em criar arquivos em pasta que exige privilégio e sabemos, que manipulação de arquivo não é algo que ajuda o desempenho, mas consegui achar o código abaixo que tem uma abordagem bem mais interessante:

01. public boolean isRunningAsAdmin()throws IOException{
02.    ProcessBuilder builder = new ProcessBuilder("cmd.exe",
              "/c",
              "whoami /groups | find \"12288\" && echo ELEVATED");
03.    builder.redirectErrorStream(true);
04.    Process p = builder.start();
05.    InputStream is =  p.getInputStream();
06.    BufferedReader br = null;
07.    StringBuilder sb = new StringBuilder();
08.    String line;
09.    try {
10.       br = new BufferedReader(new InputStreamReader(is));
11.       while ((line = br.readLine()) != null) {
12.          sb.append(line);
13.       }
14.    } finally {
15.       if (br != null) {
16.          br.close();
17.       }
18.    }

19.    String result = sb.toString();
20.    return result.contains("ELEVATED");
21. }
               
Aqui nós usamos a classe ProcessBuilder para chamar o "cmd.exe" com os parâmetros "/c", que é para terminar após executar e aí vem o parâmetro chave para verificarmos: "whoami /groups | find "12288" && echo ELEVATED", vamos por parte:  o comando "whoami" ser para verificar informações sobre o próprio usuário, e o "/groups" serve para ver as informações dos grupos de usuários. Com o resultado, vamos encontrar (find) um código: 12288, esse código só aparece no comando se você tiver executando como administrador. Então o restante do parâmetro, estamos só personalizando a mensagem de confirmação.
O restante do código se resume em executar a ação (linha 04), ler a resposta do programa (linha 09 até 20) e verificar se a resposta é o que definimos na linha 02.


quarta-feira, 7 de dezembro de 2016

.NET: Configurando o Microsoft Speech

Esses dias precisei utilizar o Microsoft Speech para usar o sintetizador de voz: a tarefa é simples: o programa precisava ler em voz alta uma mensagem. Então, vamos ver o que precisa para executar esta tarefa.