Ir ao conteúdo
  • Cadastre-se

TwistedSoul

Membro Pleno
  • Posts

    161
  • Cadastrado em

  • Última visita

Tudo que TwistedSoul postou

  1. Boa noite. Para desvincular o processo da tela, você precisa criar uma classe específica que vai executar os loops e o código do programa. Essa classe deve implementar SwingWorker<Void, Void> e os seus métodos serem disparados a partir do método doInBackground(), que é uma thread, dessa classe específica. Ao implementar SwingWorker, a ide avisa que precisa criar o método doInBackground. Dessa forma, o programa "corre" livremente em background e você pode ir atualizando a tela com informações em tempo real. Se precisar de exemplos mais concretos posso te passar isso amanhã.
  2. Boa noite. Esse código do JOptionPane precisa estar no método que será executado ao clicar no item do menu. Da forma como você fez, ele vai executar direto toda vez que o programa executar.
  3. Boa tarde. Cole o seu código aqui para que possamos ver o que está fazendo e apontar os erros para que você possa corrigir o programa.
  4. Cara, sobre a parte em negrito, a resposta é bem direta: o bot JAMAIS vai reconhecer isso. Você não tem acesso a API do jogo e com certeza o jogo não deve fornecer nenhuma informação quando isso ocorre. Você vai ter que fazer o robô ficar tirando fotos de um determinado quadrante da tela e ficar analisando a imagem. Se a verificação que aparece na tela for um texto, você precisa fazer o robô ler o texto dessa imagem (usando uma biblioteca de OCR) e, quando a tal mensagem aparecer, fazer o robô executar a ação que você precisa. Se você tiver acesso a API do jogo para isso (o que eu duvido) tem que ver na documentação dele como fazer. Casoi negativo, não tem o que fazer mesmo. O negócio é foto + tratamento da imagem + OCR.
  5. Opa, bom dia. Eu não consegui entender muito bem o que você escreveu, mas a ideia seria fazer o robô reconhecer um determinado objeto em tela e guardar sua posição/status, mas não fazer nada com ele. Depois, quando o objeto/status for validado e solicitado ao robô para efetuar a ação, ele deve clicar/interagir com o objeto, certo? Se for isso, é simples. Crie um objeto que guarda a posição do elemento em tela, um ID único para ele e o seu status atual (não verificado) e coloque ele numa lista/hashSet. A cada objeto colocado nessa lista, exiba as informações dele para o usuário. Assim, o usuário consegue ver o que o robô reconheceu em tela e pode clicar em cima do nome/ícone do elemento e o robô executa a ação. Depois disso, você pode mudar o status do elemento para verificado e remover ele da view. No final você ainda tem um "histórico" do que foi feito. Se ainda precisar (como é um jogo), pode guardar a ordem que cada objeto foi autorizado para no final ver as decisões do jogador do início ao fim.
  6. Boa noite. É simples o problema. Conecta.resultset.first(); Aqui você apenas pega o primeiro registro do resultSet. E outra, não faça a pesquisa antes. Espere o usuário digitar seu login e senha. Depois busque por aquela String na tabela de usuários. Se existir, compare a senha. Se não existir, envie a mensagem de erro.
  7. A maneira mais simples de resolver isso sem apelar para gambiarras é a seguinte: - Remova todas as variáveis que você colocou antes do primeiro scan de dentro do método main e coloque elas como variáveis globais do programa. Seu programa ficaria assim: public class Exercicio10 { int matricula, idade, estadoCivil; int funcionariosTotal=0, qtdCasadas=0, qtdSolteiras=0, desquitadas=0, percDesquitadas=0; int maisVelha=0, matricMaisNova=0, viuvas=0, idadeViuvas=0; float mediaIdadeViuvas=0; public static void main(String[] args) { // TODO code application logic here Scanner scan = new Scanner(System.in); System.out.println("Entre com um número negativo para encerrar o programa:"); do{ System.out.println("Entre com o número da matrícula do funcionário:"); matricula = scan.nextInt(); if (matricula >= 0) { executaCadastro(); } while (matricula >= 0); System.out.println("Média idade pessoas viúvas:"+mediaIdadeViuvas); System.out.println("Percentual de pessoas desquitadas:"+percDesquitadas); System.out.println("Pessoa mais Velha:"+maisVelha); System.out.println("Matricula da pessoa mais nova:"+matricMaisNova); } } e o restando do código você coloca dentro do método executaCadastro(). Dessa forma, ao digitar qualquer número maior ou igual a zero, o método é chamado e o cadastro prossegue. Ao digitar qualquer número negativo, o cadastro não é chamado por causa do if e o while é encerrado logo em seguida, exibindo o resultado final. Lembre-se: você está usando uma linguagem de programação orientada a objetos. Utilize métodos para realizar diferentes operações. Escrever tudo dentro de um bloco monolítico no main vai deixar seu código confuso, cheio de redundâncias e provavelmente muito complicado de estruturar se quiser que ele execute diversas funções diferentes. Abraço
  8. @Simon Viegas Obrigado por corrigir. Falha minha
  9. @avi Sem problema. Isso é bem complicado mesmo. Como eu não conheço o software, nem o ramo que ele vai atuar e os recursos que ele tem, além de não saber o papel dessa empresa compradora/revendedora, é meio impossível te dizer "faça assim e fique rico" Mas você chegou a considerar a questão das atualizações? Como funcionaria a questão de adição de novos recursos? Serão vocês quem decidem o que vem de novo ou seria requisições de clientes? Talvez necessidade e adaptação do mercado e legislação? E aqui fica a grande pergunta: você está vendendo um software ou um serviço? A grande sacada do software atualmente é vender serviço, ou seja, seu software é apenas uma ferramenta que "faz coisas". Daí entra a questão de cobrança de mensalidade para utilizar o software. O pagamento inicial do software seria como uma taxa para contratar o serviço e a mensalidade para dar continuidade na utilização dele. Venda do software em si, onde a pessoa ou empresa compra e era isso não funciona muito bem na atualidade. Independente da outra empresa fazer ou não publicidade para a venda, ele é de uso específico ou amplo? Pode ser usado por diversos ramos do mercado? Isso ajuda a descobrir o real alcance do seu software.
  10. @avi Cara, isso é MUITO relativo. Vocês vão desenvolver o software. OK, perfeito. Depois de pronto, essa empresa vai comprar de vocês e comercializar. Mas vai comprar o que? Os direitos de comercializar ou vai comprar "cópias" do programa para vender? Como ficam as atualizações? Vocês farão isso de graça? Novos recursos, etc... como isso será cobrado? A empresa que vai vender o software de vocês cobrará mensalidade dos clientes? Será um produto que se compra uma vez, o suporte se resume a patches de correção de bugs e conteúdo novo apenas mediante compra de pacote/upgrade do programa? Isso será intermediado por essa empresa ou será diretamente por vocês? Tem que pensar bem nesse tipo de coisa. Em um cenário normal, essa empresa encomenda o software de vocês. Perfeito. Você deve cobrar pelo tempo e pessoal despendido para codificar todo o programa, ou fechar um pacote com um valor realista para que você e sua empresa/equipe realmente recebam de acordo com o esforço. Se o contrato vai ficar apenas por isso, projeto tem que valer a pena financeiramente, ou seja, terá um valor elevado mesmo. Como de costume, correção de bugs fica no pacote, porque o programa tem que funcionar de acordo com as especificações. Se a empresa quiser novos recursos no software, apenas mediante aprovação de orçamento. E assim segue o baile. Pode também existir a possibilidade de vocês cobrarem um valor menor sobre o desenvolvimento e cobrarem x% sobre as vendas. Da mesma forma, novos recursos apenas mediante aprovação de orçamento, mas seguindo a premissa de valores inicial. De boa, tudo depende REALMENTE do público alvo do seu software. Vai vender muito? Milhares e milhares de cópias? Se a pesquisa de mercado diz que sim, talvez o segundo método seja mais vantajoso financeiramente. Se não tem certeza, talvez o primeiro método. De qualquer forma, o contrato para esse tipo de serviço deve ser muito bem feito e que nenhuma cláusula abra margem para múltiplas interpretações.
  11. Boa tarde. Para fazer esse tipo de coisa em Java, você consegue verificar se o programa está sendo executado mas não existe nada que você possa fazer em Java para descobrir se ele está respondendo. Se o seu robô consegue interagir com o programa para capturar dados, você pode fazer um método em que o robô execute uma operação específica e que ele receba sempre uma resposta padrão para o teste. Se receber, o programa está respondendo. Se não receber depois de X tempo, o programa travou. Para verificar se um programa está rodando, podemos usar o wmic do Windows e especificar o nome do .exe que você quer verificar. private void verificaProcesso() { String line; int instances = 0; try { Process processo = Runtime.getRuntime().exec("wmic.exe"); try (BufferedReader br = new BufferedReader(new InputStreamReader(processo.getInputStream()))) { OutputStreamWriter osw = new OutputStreamWriter(processo.getOutputStream()); osw.write("process where name='chrome.exe'"); osw.flush(); osw.close(); while ((line = br.readLine()) != null) { if (line.contains("chrome.exe")) { instances++; } } System.out.println("Existem " + instances + " processos chrome.exe rodando"); } } catch (IOException ioe) { ioe.printStackTrace(); } } Nesse caso, atribuímos um processo com o Runtime.getRuntime().exe(), buscando o programa wmic.exe do Windows. Depois, escrevemos nossa "pesquisa" no processo usando o OutputStreamWriter onde buscamos por "process where name = 'chrome.exe'". Nesse caso, eu busquei pelo programa chrome.exe. Se existir alguma linha de processo que contenha chrome.exe, instances será incrementado em 1 toda vez que ele for encontrado. Depois, eu imprimi no console quantas vezes esse processo apareceu. No seu caso, verifique se instances for igual a 1 (creio que só deva existir uma instância desse programa funcionando, certo?), você executa a verificação do robô para ver se o programa está respondendo. Mais específico que isso, apenas com programação em C/C# e JNI.
  12. @RafaelGSS Você SEMPRE vai precisar usar new para instanciar um novo objeto. Teste teste1; Em java você sempre precisa usar o new quando for usar um novo objeto pela primeira vez. Exceção são tipos nativos. No caso acima, teste1 será um objeto nulo, pois existem apenas referencia ao objeto Teste mas ele nunca foi instanciado/inicializado. Seria como reservar uma área de memória para armazenar alguma informação mas nunca ter colocado nada lá. Então, se você, por exemplo, tentar usar teste.getX(); Vai receber um erro de NullPointerException. Se você fizer um teste do tipo Teste teste1; if (teste1 == null) { System.out.println("Objeto nulo. Precisa usar new"); } else { System.out.println("Objeto Inicializado/Instanciado. Não precisa usar new"); } Nesse caso, você sempre vai receber a mensagem "Objeto nulo. Precisa usar new". Se fizer Teste teste1 = new Teste(); if (teste1 == null) { System.out.println("Objeto nulo. Precisa usar new"); } else { System.out.println("Objeto Inicializado/Instanciado. Não precisa usar new"); } Sempre vai receber a resposta "Objeto Inicializado/Instanciado. Não precisa usar new". adicionado 16 minutos depois @RafaelGSS Esqueci de explicar uma coisa importante: Se você fizer Teste teste1; teste1.setX(0); //OU teste1.getX(); O compilador logo vai te avisar que o objeto teste1 não foi inicializado e vai falhar. Isso evita que você tente fazer alguma operação com um objeto nulo. Claro, dependendo do que você vai programar, um método pode retornar um objeto nulo por causa de algum teste ou validação de negócio que você precisa fazer. Nesse caso, ao obter a resposta de um método que retorne o objeto específico, SEMPRE teste para null. Eu sempre evito objetos nulos nas minhas respostas (a não ser quando não há outra maneira). Como eu sempre atribuo valores padrão no construtor dos meus objetos de dados, eu uso um método isGenerico() para fazer a validação. Se os valores da PK do objeto forem os padrão, eu entendo que o objeto não retornou nenhuma informação e trato de acordo. Se a PK for diferente dos valores padrão, então veio algum dado. Porque faço isso? Para evitar um nullPointer. Ao receber um NullPointer de erro na tela, você possui dois erros no seu código: - O primeiro é ter devolvido ou manipulado um objeto nulo - O segundo é não ter tratado esse erro Abraço
  13. Olá, bom dia. Se você não definiu nenhum construtor padrão, todas as variáveis que não tiverem valores explícitos ficarão com valor null ou em caso de int, double, boolean, etc, como 0 ou false, já que esses tipos nativos não possuem valor nulo. Eu sempre recomendo fazer os dois construtores pois daí você sabe exatamente o tipo de retorno de cada variável e não precisa ficar testando pra nulo, etc. Exemplo: public class Teste { private String nome; private String cpf; private int idade; private double salario; private String endereco; //Aqui, criaremos o construtor padrão, ou seja, //sem nenhum valor passado por parametros public Teste() { this.setNome(""); this.setCpf(""); this.setIdade(0); this.setSalario(0.00); this.setEndereco(""); } //Aqui o constutor com os valores passados por parametro public Teste (String nome, String cpf, int idade, doubla salario, String endereco) { this.setNome(nome); this.setCpf(cpf); this.setIdade(idade); this.setSalario(salario); this.setEndereco(endereco); } //Aqui ficam os getters e setters de cada variavel. //Faca as validacoes dos dados dentro dos setters //Um exemplo de validacao do setter para a variavel nome public void setNome(String nome) { //Neste exemplo simples, apenas vamos verificare se não //foi passado aqui uma String com valor nulo. //Caso positivo, nome será uma String em branco. //Caso negativo, a variável nome da classe Teste vai //receber o valor da variavel nome passada no setter if (nome == null) { this.nome = ""; } else { this.nome = nome; } } } Dessa forma, quando criarmos uma nova instância do objeto Teste Teste novoTeste = new Teste(); Teremos certeza que todas as variáveis do tipo String foram inicializadas e como valor uma String vazia, as variáveis do tipo int como 0 e as variáveis do tipo double como 0.00; Então, você pode através de setters ir atribuindo valores individualmente às suas variáveis ou simplesmente usar o construtor completo caso já tenha todos os dados que precisa ao instanciar ele.
  14. Isso serve? https://www.intertech.com/Blog/spring-security-active-directory-ldap-example/ Que versão do Spring você usa?
  15. @Eder123 Boa noite. Um filtro nada mais é que um objeto qualquer onde você guarda diversas variáveis (dados do filtro) que depois serão usados em uma busca. Exemplo: public class FiltroCliente { private String nome; private String cpf; public FiltroCliente() { this.setNome(""); this.setCPF(""); } public FiltroCliente(String nome, String cpf) { this.setNome(nome); this.setCPF(cpf); } //getters e setters } Pronto. Isso é um objeto de filtro. Agora é necessário programar na model o método que efetua a pesquisa através das informações armazenadas no filtro. PS.: se você já está trabalhando em cima de um programas com sessão e acesso a pastas em disco, já passou de iniciante a tempo. Existe algum esqueleto desse programa para você se basear ou precisa fazer do zero?
  16. Como está sendo gerado os IDs dos episódios? O que faz a classe R? Talvez algo de errado com os valores de Catalogo? Depurando o click em um checkbox, você vai saber o que ocorre para que mais de um checkbox seja marcado ao mesmo tempo. O erro (pelo menos não achei nada aqui, já que eu brinco pouquíssimo com Android) deve estar em outra ou outras classes.
  17. Depende. Cada fabricante faz de um jeito. Se tiver como configurar via BIOS para usar o monitor externo ao invés do display do note, você tem como remover. Se não houver configuração para isso, não vai funcionar. Além disso, se você remover o display inteiro, vai ficar sem wifi, webcam e, dependendo do modelo, sem microfone também. Você teria que desmontar o note e remover todos os fios referentes e esses dispositivos.
  18. Eu cheguei a dar uma ideia pra você no outro tópico que abriu a respeito: Dei uma pesquisada sobre o assunto e é aquilo mesmo que eu escrevi. Se alguém sabe o endereço de um link de um arquivo em qualquer servidor, não existe tag ou recurso HTML que resolva isso. Precisa desenvolver um recurso especificamente para isso como o que descrevi no outro tópico.
  19. @IvanJava Sim, é isso mesmo. Você conseguiu entender a diferença sutil, mas primordial, do porque seu código sempre "resetava" o valor depositado para 1000? Uma dica que SEMPRE dou para quem está iniciando e precisa fazer esses programas para aprendizado: comece pelo menu. Faça ele funcionar e depois vá implementando o código de cada opção que o menu especifica. Dessa forma você tem uma visão ampla do que deve ou não instanciar e como repassar, armazenar e calcular variáveis para que fiquem visíveis às classes e métodos que as utilizam. Bom estudo.
  20. @IvanJava Precisa alterar a classe OperadorJ também. Se alterar o código como fiz acima, vai funcionar. Perceba que você instancia um novo objeto Menu na classe OperadorJ e chama a tela desse novo objeto. Ele, por sua vez, cria uma nova instancia da classe OperadorJ, que tem seus valores zerados e assim infinitamente. Você inclusive nunca vai sair do laço while da classe Menu por causa disso. Você criou um loop infinito que gera sempre um novo objeto, um após o outro. Da maneira que fiz, Menu e OperadorJ são instanciados apenas uma única vez e serão "reaproveitados" durante toda a execução, mantendo os valores de todas as suas variáveis que sofreram mudanças, no seu caso, a variável valor.
  21. Programador freelancer, antes de mais nada, necessita dominar uma linguagem. Normalmente num freela o cara tem que fazer todo o software sozinho, desde estrutura de banco de dados, passando por engenharia do software em si e as telas. Existem alguns sites por aí onde você pode se candidatar como freelancer, mas daí precisa ser bom no que se faz, pois precisa postar seu currículo, seu conhecimento e quanto você cobra por hora. Além disso, se você não tiver nenhuma referência de algum usuário do site, terá que mostrar trabalhos que fez, por exemplo, contribuindo para algum projeto open source. A procura de trabalho depende muito da região. Existem empresas que contratam programadores por projeto e/ou com tempo de prestação de serviço pré-determinado, mas para isso precisa ter as qualificações necessárias e possuir empresa com CNPJ para emitir nota de serviço. Outra opção seriam os polos em universidades que necessitam de programadores com os mais diversos níveis de conhecimento, desde iniciantes a macacos velhos. Você morando em SP tem acesso a ambos e com certa abundância. Se você não conhece nenhuma linguagem ainda, recomendo aprender Java ou C#, que são duas linguagens muito fortes no mercado e conhecer HTML, CSS e Javascript, pois software com interfce web são o futuro.
  22. O problema está na classe Menu. Vou colocar aqui a solução pra você (que é bem simples) mas eu gostaria que você desse uma olhada no código e me diga porque o seu falhou e porque o meu deu certo. public class Menu { public void tela() {//tela de escolha Scanner tec = new Scanner(System.in); OperadorJ S = new OperadorJ(); String escolha; System.out.println(" a- consultar saldo\n b- Depositar\n c- Sacar\n s- Sair "); escolha = tec.nextLine(); while (!"s".equals(escolha)) { if ("a".equals(escolha)) { S.getSaldo(); } else if ("b".equals(escolha)) { S.depositar(); } else if ("c".equals(escolha)) { S.saque(); } System.out.println(" a- consultar saldo\n b- Depositar\n c- Sacar\n s- Sair "); escolha = tec.nextLine(); } System.exit(0); } } E a classe OperadorJ também muda pois o Menu não precisas em hipótese alguma ser instanciado de novo public class OperadorJ { float valor = 1000; public void depositar() {//exige do usuário valores para deposito float Vdeposito; Scanner tec = new Scanner(System.in); System.out.print("Digite um valor para depósito : "); Vdeposito = tec.nextInt(); valor += Vdeposito; System.out.println("Seu novo saldo é " + valor); } } Abraço
  23. O erro aqui não me parece ser o servidor e sim a aplicação. Olha essa linha do log Error loading byte data : http://localhost:8080/Voucher-Web/_images/no_checked.jpg Mesmo que no restante do log as outras chamadas são feitas para a porta 81 no ambiente de homologação, essa chamada está sendo feita para a porta 8080. Aposto com você que o mesmo erro ocorre com o PDF porque na hora de desenvolver essas rotinas, quem as fez não utilizou as informações de jboss.server.url=http://localhost:81/Voucher-Web/ e colocou os dados de acesso diretamente no código como uma String. Tenta buscar na tua IDE, no projeto inteiro, pela string localhost:8080 E veja se essa informação não ficou hardcoded. Se não foi na aplicação em si (que eu acho que não seja), provavelmente está fixo na sua ferramenta de relatórios que gera o PDF, no caso, JasperReports. Abraço
  24. Olá, bom dia. Antes de explicar o problema, queria te dar uma sugestão: faça uma rotina específica que controle o menu. A cada ação que você executa sempre é instanciada uma nova classe Operador, sem necessidade, para fazer controle de tela e voltar ao menu. Sobre o problema do valor do depósito, ele sempre vai resetar porque a cada vez que você instancia a classe Operador, o valor da variável depósito sempre é inicializado com o mesmo valor pois você deixou a variável valor como sendo uma variável interna da classe. Para resolver isso existem duas possibilidades: A variável valor ser global, ou seja, uma variável da aplicação Alterar drasticamente seu código, fazendo uma classe que controle o menu e instanciar a classe Operador apenas uma vez e fazer todas as operações em cima dela. Dessa forma, as variáveis internas não serão inicializadas com o valor default de 1000 que você especificou a cada vez que o usuário resolver fazer uma nova operação no caixa eletrônico Minha recomendação? A segunda opção. Dá muito mais trabalho, porém, o código fica limpo, menor e muito, mas muito mais fácil de ler. Eu não posso fazer o código pra você, mas posso te dar dicas e mostrar alguns trechos de códigos a medida que você for fazendo e postando suas dúvidas aqui. Abraço

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!