[RESOLVIDO]-executar classe java no DOS com passagem de parametro
15 respostas
R
rafaelczy
pessoal to resolvendo um chat via apostila FJ-11 e tenho a minha classe Cliente.
no DOS roda ela C:\JAVA CLIENTE
mas como passo junto a string NOME que defini para receber como parametro no construtor dela?
abaixo minha classe:
importjava.io.IOException;importjava.io.PrintStream;importjava.net.Socket;importjava.net.UnknownHostException;importjava.util.Scanner;publicclassCliente{publicstaticvoidmain(String[]args)throwsUnknownHostException,IOException{// dispara clientenewCliente("127.0.0.1",12345,"nome").executa();}privateStringhost;privateintporta;privateStringnome;publicCliente(Stringhost,intporta,Stringnome){this.host=host;this.porta=porta;this.nome=nome;}publicvoidexecuta()throwsUnknownHostException,IOException{Socketcliente=newSocket(this.host,this.porta);System.out.println("O cliente se conectou ao servidor!");// thread para receber mensagens do servidorRecebedorr=newRecebedor(cliente.getInputStream());newThread(r).start();// le msgs do teclado e manda pro servidorScannerteclado=newScanner(System.in);PrintStreamsaida=newPrintStream(cliente.getOutputStream());while(teclado.hasNextLine()){saida.println(nome+teclado.nextLine());}saida.close();teclado.close();cliente.close();}}
no mail, tem o parâmetro args, que é um String[], essas Strings são os parâmetros que o SO passa para ele. Pega a primeira posição e você terá o primeiro parâmetro.
R
rafaelczy
nao leva a mal o nub aqui cara…entendi na teoria mas como é a sintaxe?
c:\java Cliente …mais o que ?
R
rafaelczy
seria assim:
c:\java Cliente paulo
???
E
evefuji
heheh, normal, no começo é assim mesmo.
Bem, se você chama o seu software assim:
Cliente.jar
Com o parametro seria assim
Cliente.jar"meu parâmetro"
E no .java:
public static void main(String[] args) throws UnknownHostException, IOException {
// dispara cliente
String nome = args.lenght>0?args[0]:"parametro padrão";
new Cliente("127.0.0.1", 12345, nome).executa();
}
(não lembro se no Array o lenght era um método ou uma propriedade, acho que era uma propriedade)
nessa sintaxe vc esta dizendo: se string nome tamanho maior que 0 devolve string posição 0 e se nao passa o “parametro padrao”
acho q nao né?
e no prompt do DOS faço assim pra rodar minha classe:
c:\java Cliente
entao pra passar o paramtro no DOS tem que ser assim:
c:\java Cliente “paulo”
correto assim no DOS entao ne?
R
rafaelczy
pessoal eu tenho minha classe Cliente que no prompt do DOS rodo assim
c:\java Cliente
mas como faço pra passar junto uma string?
c:\java Cliente string
tentei assim e nao funcionou
abaixo minha classe
importjava.io.IOException;importjava.io.PrintStream;importjava.net.Socket;importjava.net.UnknownHostException;importjava.util.Scanner;publicclassCliente{publicstaticvoidmain(String[]args)throwsUnknownHostException,IOException{// dispara clientenewCliente("127.0.0.1",12345,"nome").executa();}privateStringhost;privateintporta;privateStringnome;publicCliente(Stringhost,intporta,Stringnome){this.host=host;this.porta=porta;this.nome=nome;}publicvoidexecuta()throwsUnknownHostException,IOException{Socketcliente=newSocket(this.host,this.porta);System.out.println("O cliente se conectou ao servidor!");// thread para receber mensagens do servidorRecebedorr=newRecebedor(cliente.getInputStream());newThread(r).start();// le msgs do teclado e manda pro servidorScannerteclado=newScanner(System.in);PrintStreamsaida=newPrintStream(cliente.getOutputStream());while(teclado.hasNextLine()){saida.println(nome+": "+teclado.nextLine());}saida.close();teclado.close();cliente.close();}}
luxu
pq vc fala DOS? pq naum cria um executável (*.jar) e faz a programação toda nele com caixa de texto e um botão pra mandar essa info? axo mais prático do que fazer do jeito que vc ker…
oi cara obrigado pela ajuda
fiz algo errado e nao funfou
sera que é algo que tem errado no meu cod?
abri dois prompt do dos (um pro serv e outro pro cliente)
dei C:\JAVAC *.JAVA (compilei todas .class)
no cliente dei c:\java Cliente PAULO
ai escrevi "ola" no Cliente
mas a impressão sai:
nome: ola
ai inves de:
PAULO: ola
importjava.io.IOException;importjava.io.PrintStream;importjava.net.Socket;importjava.net.UnknownHostException;importjava.util.Scanner;publicclassCliente{publicstaticvoidmain(String[]args)throwsUnknownHostException,IOException{// dispara clienteStringnome=args.length>0?args[0]:"parametro padrão";newCliente("127.0.0.1",12345,"nome").executa();}privateStringhost;privateintporta;privateStringnome;publicCliente(Stringhost,intporta,Stringnome){this.host=host;this.porta=porta;this.nome=nome;}publicvoidexecuta()throwsUnknownHostException,IOException{Socketcliente=newSocket(this.host,this.porta);System.out.println("O cliente se conectou ao servidor!");// thread para receber mensagens do servidorRecebedorr=newRecebedor(cliente.getInputStream());newThread(r).start();// le msgs do teclado e manda pro servidorScannerteclado=newScanner(System.in);PrintStreamsaida=newPrintStream(cliente.getOutputStream());while(teclado.hasNextLine()){saida.println(nome+": "+teclado.nextLine());}saida.close();teclado.close();cliente.close();}}
R
rafaelczy
vc diz usando GUI (interface grafica) ?
vou tentar mas ainda nao to seguro pra criar .jar e nao saco muito de GUI ainda
E
evefuji
repara no seu código:
new Cliente("127.0.0.1", 12345, "nome").executa();
Você está passando a String “nome” ao invés de passar o parâmetro.
R
rafaelczy
evefuji:
repara no seu código:
new Cliente("127.0.0.1", 12345, "nome").executa();
Você está passando a String “nome” ao invés de passar o parâmetro.
valeu friend
funfou
mas o que diz exatamente nessa linha abaixo que vc me fornceu?
Stringnome=args.length>0?args[0]:"parametro padrão";// nao entendi bem pq tenho que implementar essa linha de comando
se string nome>0 retorna… se nao retorna…
R
rafaelczy
publicclassCliente{publicstaticvoidmain(String[]args)throwsUnknownHostException,IOException{// dispara clienteStringnome=args.length>0?args[0]:"parametro padrão";// ate entendo o op ternario mas...fiquei na duvida assim:// se comprimento do array "args" > 0 devolve array "args" na posição 0 e se nao devolve a string "parametro padrão"//posição 0 seria: java Cliente "posição zero"// correto?// e pq esse "parametro padrão" na linha de comando ?newCliente("127.0.0.1",12345,nome).executa();}privateStringhost;privateintporta;privateStringnome;publicCliente(Stringhost,intporta,Stringnome){this.host=host;this.porta=porta;this.nome=nome;// E FIQUEI COM A DECLARAÇÃ REPETIDA. TA CERTO ISSO?}
E
evefuji
o lenght retorna o tamanho do array, no caso, a quantidade de parâmetros passados. Se foi passado algum parâmetro, o tamanho do array vai ser maior que 0, se não foi passado nenhum parâmetro, vai ser passado o “parâmetro padrão” (que vc pode passar outra coisa)