[RESOLVIDO] Apontar um nome de uma variável e comparar com o nome de outra variável

Prezados, Boa noite.
Queria saber se era possível eu comparar um numero obtido por um Jtextfield com o nome de outra variável?
Estou desenvolvendo um programa que instala as impressoras configuradas em rede, estou utilizando um array para executar o comando {“cmd.exe”, “/c” , “start” , “\NOMEDOSERVIDOR\PRINT01”}, após gravar na variável String[] prt01 = new String[].
Pois bem para executar o Runtime.getRuntime().exec(prt01); eu preciso conferir se o numero digitado pelo usuário é para impressora 01, a pergunta é tem como eu comparar o que é digitado para ver se é a impressora a ser instalada? visto que só posso executar o comando para impressora certa.

Espero que tenha esclarecido.

if (meuJTextField.getText().equals(textoQueQueroComparar)) {
    // Faz algo
}

Olá Staroski, acho que não soube explicar direito eu preciso pegar o conteúdo de uma variável que armazena o que foi digitado numa Jtexftield e comparar com o nome de um variável, ou seja, exemplo:

O usuário digita prt001, então eu tenho uma variável que tem o nome prt001, então preciso de uma forma para que se o que foi digitado: prt001 for igual a variável prt001, ele vai executar o comando que está nessa variável.

acho que agora expliquei melhor

Acho mais fácil você armazenar os objetos dessas variáveis em um Map<String, String[]> que tem como chave esse nome.

meuMap.put("prt01", new String [] {“cmd.exe”, “/c” , “start” , “\NOMEDOSERVIDOR\PRINT01”});

Aí depois é só obter os cmd assim:

String nome = "prt01";
String[] cmd = meuMap.get(nome);
Runtime.getRuntime().exec(cmd);

Obrigado staroski.
Meu codigo ficou dessa forma:

Fiquei pensando vou ter que adicionar 50 códigos desses, teria alguma forma de fazer com que não precise copiar 50 vezes esse código?
de forma que as variáveis sejam da print-001 a print-051, da mesmo forma que irei mudar o nome, terei que mudar o comando no CMD, pensei em fazer um switch/case, mesmo assim ficará imenso. Segue o código abaixo

Process p;

      String full = s;
      System.out.println(full);
      Map<String, String[]> mos = new HashMap <String, String[]>();
      mos.put("prt001", new String[]{"cmd.exe","/c","start","\\\\NOMESERVIDOR\\print-001"});
      String nome = "prt001";
      String[] cmd = mos.get(nome);
  
      switch(full){
      case "prt001":
           try {
                System.out.println("Agora , conseguimos!");
            p = Runtime.getRuntime().exec(nome);
           
        } catch (IOException ex) {
            Logger.getLogger(TelaInstalarImpressora.class.getName()).log(Level.SEVERE, null, ex);
        }
  }t>

Não vai copiar o código 50 vezes, alias o código que você postou não faz sentido, você manda a classe Runtime executar a variável nome e não o seu array de comando, sem contar que criou uma variável local pro mapa, deveria ser variável de instância.

Eu faria mais ou menos assim:

public class Exemplo {

    public static void main(String[] args) {
        PrintRunner printRunner = new PrintRunner();
        printRunner.execute("prt001");
        printRunner.execute("prt002");
        printRunner.execute("prt003");
    }
}

Aqui a classe que armazena 50 printers para executar:

import java.util.HashMap;
import java.util.Map;

public class PrintRunner {

    private final Map<String, Printer> printers;

    public PrintRunner() {
        printers = new HashMap<>();
        String servidor = "NOMESERVIDOR";
        for (int i = 1; i <= 50; i++) {
            String chave = String.format("prt%03d", i);
            String nome = String.format("print-%03d", i);
            printers.put(chave, new Printer(servidor, nome));
        }
    }

    public void execute(String chave) {
        Printer printer = printers.get(chave);
        if (printer == null) {
            throw new IllegalArgumentException("Nenhum comando encontrado para a chave \'" + chave + "\"");
        }
        printer.execute();
    }
}

E aqui a classe que representa um printer e sabe como executar o Runtime.exec:

public class Printer {

    private final String servidor;
    private final String nome;

    Printer(String servidor, String nome) {
        this.servidor = servidor;
        this.nome = nome;
    }

    public void execute() {
        System.out.printf("Executando %s em %s%n", nome, servidor);
        try {
            String[] command = new String[] { "cmd.exe", "/c", "start", "\\\\" + servidor + "\\" + nome };
            Runtime runtime = Runtime.getRuntime();
            Process process = runtime.exec(command);
            process.waitFor();
            System.out.printf("%s executado com sucesso em %s%n", nome, servidor);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
1 curtida

Bom dia staroski, vou estudar o código e testá-lo na minha realidade, tenho dificuldades em entender alguns comandos ainda, porém voltou a postar os resultados.

Prezado Amigo staroski, funcionou perfeitamente da forma que descreveu. Muito obrigado pela Ajuda.

1 curtida