qual'è il modo giusto per inserire un parametro esternamente in java?
qual'è il modo giusto per inserire un parametro esternamente in java?
Dipende: se è una applicazione "standalone" i parametri da linea di comando (li trovi nel solito String[] che il main() riceve), se è una applet i parametri passati con <param name="..." value="..."> (li trovi con getParameter() di Applet).Originariamente inviato da nike_i6905
qual'è il modo giusto per inserire un parametro esternamente in java?
In ogni caso ci sono anche le system-property che si passano al runtime con l'opzione -D all'avvio (per le applet si impostano nel pannello di controllo Java).
Altrimenti si possono usare file di configurazione o roba simile.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Ho provato così:
e pare vada bene...codice:BufferedReader console=new BufferedReader(new InputStreamReader(System.in)); String file = console.readLine();
ma se volessi inserire il parametro come args del main come si manda in esecuzione il file compilato dalla riga di comando coni parametri?
java ClasseConMain arg1 arg2 arg3 ...Originariamente inviato da nike_i6905
ma se volessi inserire il parametro come args del main come si manda in esecuzione il file compilato dalla riga di comando coni parametri?
Gli argomenti ovviamente sono stringhe e li hai nel String[] che il main riceve.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Mi dice che non mi trova la main class...
Could not find the main class: Server.jar.
Se è un jar lo avvii con java -jar Server.jar
Si giusto e va bene, grazie
ma mentre con il mio codice funziona
con il metodo con args del main non funziona mi da errore...
il codice client è questo
....codice:....//invio messaggio System.out.println("Sending..." + args[0]); os.println(args[0]);os.flush(); //stampa risposta dal server System.out.println("Attesa risposta dal server"); String line=null;
quello del server è questo
codice:.... is=new BufferedReader(new InputStreamReader(client.getInputStream())); //DataInputStream ib=new DataInputStream(client.getInputStream()); //is = new DataInputStream(ib); BufferedOutputStream ob=new BufferedOutputStream(client.getOutputStream()); os= new PrintStream(ob,false);//per stampare il file //qui mi da errore...java.lang.NullPointerException String n=new String(is.readLine()); System.out.println("File: "+ n); FileInputStream file=new FileInputStream(n); DataInputStream ifile=new DataInputStream(file); String r=null; ....
Non hai specificato l'errore che ricevi.
edit: era nel codice, scusa. Potresti linkare il progetto?
Lato Server
e lato Clientcodice:package server5; import java.net.*; import java.io.*; public class Server { public static void main(String[] args) { Socket client=null; ServerSocket server=null; try { server=new ServerSocket(11111); } catch(IOException e) { e.printStackTrace(); } while(true) { System.out.println("Attesa Connessione..."); try { client=server.accept(); } catch(IOException e) { System.out.println("connessione fallita"); System.exit(1); } System.out.println("Connessione da" + client); BufferedReader is=null; PrintStream os=null; try { is=new BufferedReader(new InputStreamReader(client.getInputStream())); BufferedOutputStream ob=new BufferedOutputStream(client.getOutputStream()); os= new PrintStream(ob,false);//per stampare il file String n=new String(is.readLine()); System.out.println("File: "+ n); FileInputStream file=new FileInputStream(n); DataInputStream ifile=new DataInputStream(file); String r=null; while((r=ifile.readLine())!=null) { os.println(r); } os.flush();os.close();is.close();client.close(); } catch(FileNotFoundException e) { System.out.println("File non trovato"); os.println("File non trovato"); os.flush();os.close(); } catch(Exception e) { e.printStackTrace(); } } } }
codice:package client4; import java.io.*; import java.net.*; /** * * @author Alessandro */ public class Client4 { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here Socket s=null; BufferedReader is=null; PrintStream os=null; try { s = new Socket("localhost",11111); is = new BufferedReader(new InputStreamReader(s.getInputStream())); os = new PrintStream(new BufferedOutputStream(s.getOutputStream())); }catch(IOException e) { System.out.println(e.getMessage()); System.exit(1); } //controllo argomenti if(args.length==0) { os.println("Missing name file!"); System.out.println("Manca argomento"); os.flush();os.close(); return; } try { is.close();s.close(); } catch(IOException e) { System.out.println(e.getMessage()); } //invio messaggio System.out.println("Sending..." + args[0]); os.println(args[0]);os.flush(); //stampa risposta dal server System.out.println("Attesa risposta dal server"); String line=null; try { while((line=is.readLine())!=null) { System.out.println("Messaggio: "+ line); } is.close();os.close();s.close(); } catch(IOException e) { System.out.println(e.getMessage()); } } }
Ho cercato di modificare il meno possibile. Le parti alterate le ho contrassegnate con un commento. In effetti c'era solo qualche piccola imperfezione che, ovviamente, non era legata all'utilizzo degli argomento da linea di comando. Prova a dare un'occhiata:
Server
Clientcodice:package server5; import java.net.*; import java.io.*; public class Server { public static void main(String[] args) { Socket client=null; ServerSocket server=null; try { server = new ServerSocket(11111); } catch(IOException e) { e.printStackTrace(); //>> se non riusciamo a creare il server << //>> è inutile continuare << return; } while(true) { System.out.println("Attesa Connessione..."); try { client = server.accept(); } catch(IOException e) { System.out.println("connessione fallita"); System.exit(1); } System.out.println("Connessione da" + client); BufferedReader is = null; PrintStream os = null; try { is = new BufferedReader(new InputStreamReader(client.getInputStream())); BufferedOutputStream ob = new BufferedOutputStream(client.getOutputStream()); os = new PrintStream(ob,false);//per stampare il file String n = new String(is.readLine()); System.out.println("File: " + n); //>> readline di DataInputStream è deprecato << //>> utilizzo BufferedReader<< FileReader file = new FileReader(n); BufferedReader ifile = new BufferedReader(file); String r=null; while((r = ifile.readLine())!=null) { os.println(r); } os.flush(); os.close(); is.close(); client.close(); } catch(FileNotFoundException e) { System.out.println("File non trovato"); os.println("File non trovato"); os.flush(); os.close(); } catch(Exception e) { e.printStackTrace(); } } } }
codice:package client4; import java.io.*; import java.net.*; /** * * @author Alessandro */ public class Client4 { /** * @param args the command line arguments */ public static void main(String[] args) { Socket s=null; BufferedReader is=null; PrintStream os=null; //controllo argomenti //>> lo faccio prima del resto però << if(args.length==0) { System.out.println("Manca argomento"); return; } try { s = new Socket("localhost",11111); is = new BufferedReader(new InputStreamReader(s.getInputStream())); os = new PrintStream(new BufferedOutputStream(s.getOutputStream())); } catch(IOException e) { System.out.println(e.getMessage()); System.exit(1); } //>> Perchè li chiudi se dopo li utilizzi? << /* try { is.close(); s.close(); } catch(IOException e) { System.out.println(e.getMessage()); } */ //invio messaggio System.out.println("Sending..." + args[0]); os.println(args[0]); os.flush(); //stampa risposta dal server System.out.println("Attesa risposta dal server"); String line=null; try { while((line=is.readLine())!=null) { System.out.println("Messaggio: "+ line); } is.close(); os.close(); s.close(); } catch(IOException e) { System.out.println(e.getMessage()); } } }![]()