[RESOLVIDO]-executar classe java no DOS com passagem de parametro

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:

import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Cliente {
    public static void main(String[] args) throws UnknownHostException, IOException {
    // dispara cliente
        new Cliente("127.0.0.1", 12345, "nome").executa();
    }

    private String host;
    private int porta;
	private String nome;
   
    public Cliente (String host, int porta, String nome) {
        this.host = host;
        this.porta = porta;
        this.nome = nome;
    }
    
    public void executa() throws UnknownHostException, IOException {
       
        Socket cliente = new Socket(this.host, this.porta);
        System.out.println("O cliente se conectou ao servidor!");
          
        // thread para receber mensagens do servidor
        Recebedor r = new Recebedor(cliente.getInputStream());
        new Thread(r).start();
       
        // le msgs do teclado e manda pro servidor
        Scanner teclado = new Scanner(System.in);
        PrintStream saida = new PrintStream(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.

nao leva a mal o nub aqui cara…entendi na teoria mas como é a sintaxe?
c:\java Cliente …mais o que ?

seria assim:
c:\java Cliente paulo
???

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)

 String nome = args.lenght>0?args[0]:"parametro padrão";

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?

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

import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Cliente {
    public static void main(String[] args) throws UnknownHostException, IOException {
    // dispara cliente
        new Cliente("127.0.0.1", 12345, "nome").executa();
    }

    private String host;
    private int porta;
	private String nome;
   
    public Cliente (String host, int porta, String nome) {
        this.host = host;
        this.porta = porta;
        this.nome = nome;
    }
    
    public void executa() throws UnknownHostException, IOException {
       
        Socket cliente = new Socket(this.host, this.porta);
        System.out.println("O cliente se conectou ao servidor!");
          
        // thread para receber mensagens do servidor
        Recebedor r = new Recebedor(cliente.getInputStream());
        new Thread(r).start();
       
        // le msgs do teclado e manda pro servidor
        Scanner teclado = new Scanner(System.in);
        PrintStream saida = new PrintStream(cliente.getOutputStream());
       
        while (teclado.hasNextLine()) {
            saida.println(nome + ": " + teclado.nextLine());
        }
        saida.close();
        teclado.close();
        cliente.close();
    }
}

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…

Faz como disse o evefuji.

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();    
}    

depois é só fazer

Javac Cliente.java

java Cliente teste

[quote=Fexx]Faz como disse o evefuji.

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();    
}    

depois é só fazer

Javac Cliente.java

java Cliente teste
[/quote]

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

[code]import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Cliente {
public static void main(String[] args) throws UnknownHostException, IOException {
// dispara cliente
String nome = args.length>0?args[0]:“parametro padrão”;
new Cliente(“127.0.0.1”, 12345, “nome”).executa();
}

private String host;
private int porta;
private String nome;

public Cliente (String host, int porta, String nome) {
    this.host = host;
    this.porta = porta;
    this.nome = nome;
}

public void executa() throws UnknownHostException, IOException {
   
    Socket cliente = new Socket(this.host, this.porta);
    System.out.println("O cliente se conectou ao servidor!");
      
    // thread para receber mensagens do servidor
    Recebedor r = new Recebedor(cliente.getInputStream());
    new Thread(r).start();
   
    // le msgs do teclado e manda pro servidor
    Scanner teclado = new Scanner(System.in);
    PrintStream saida = new PrintStream(cliente.getOutputStream());
   
    while (teclado.hasNextLine()) {
        saida.println(nome + ": " + teclado.nextLine());
    }
    saida.close();
    teclado.close();
    cliente.close();
}

}[/code]

vc diz usando GUI (interface grafica) ?
vou tentar mas ainda nao to seguro pra criar .jar e nao saco muito de GUI ainda

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.

[quote=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.[/quote]

valeu friend
funfou
mas o que diz exatamente nessa linha abaixo que vc me fornceu?

 String nome = 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…

public class Cliente {
    public static void main(String[] args) throws UnknownHostException, IOException {
    // dispara cliente
    	String nome = 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 ?
        new Cliente("127.0.0.1", 12345, nome).executa();
    }

    private String host;
    private int porta;
	private String nome;
   
    public Cliente (String host, int porta, String nome) {
        this.host = host;
        this.porta = porta;
        this.nome = nome;  // E FIQUEI COM A DECLARAÇÃ REPETIDA. TA CERTO ISSO?
    }

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)

valeu, obrigado pela ajuda