Entra

View Full Version : [Java] Parametri a file .jar


tony.www
18-06-2007, 12:15
Salve ragazzi, ho un problema..
Ho creato in java una piccola form che si connette (via JDBC) ad un database è ne visualizza il contenuto. L'unica cosa che fa è creare una query con il nome di un comune specifico, il mio problema è che devo fare n file .jar per n comuni, vorrei creare un unico file .jar che prenda un argomento da fuori, è che lo passi al args[] del main, con eclipse riesco a farlo ma creando il jar da windows non so proprio come fare, dovrei creare un collegamento al file? è poi come faccio a passare un parametro?
Scusate per il post un pò contorto.. :D
Grazie a chi mi dedica un po di tempo..:)

PGI-Bis
18-06-2007, 12:30
Potresti aprire una finestrella di dialogo che richiede il nome del comune e poi lancia il programma. Non è complicato da fare.

import javax.swing.*;

public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() { public void run() {
String nome = JOptionPane.showInputDialog(null, "Nome del comune?");
startApplication(nome);
}});

private static void startApplication(final String nome) {
Runnable task = new Runnable() { public void run() {
//fa quello che faceva il main
}};
new Thread(task, "Application runner").start();
}
}

Lanci il programma, compare la finestrella che chiede il nome del comune, lo ottieni come stringa e poi ti sbizzarrisci come prima.

tony.www
18-06-2007, 12:36
Potresti aprire una finestrella di dialogo che richiede il nome del comune e poi lancia il programma. Non è complicato da fare.

import javax.swing.*;

public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() { public void run() {
String nome = JOptionPane.showInputDialog(null, "Nome del comune?");
startApplication(nome);
}});

private static void startApplication(final String nome) {
Runnable task = new Runnable() { public void run() {
//fa quello che faceva il main
}};
new Thread(task, "Application runner").start();
}
}

Lanci il programma, compare la finestrella che chiede il nome del comune, lo ottieni come stringa e poi ti sbizzarrisci come prima.

Ci avevo pensato, il problema è che è una finestra integrata in un altro software, si chiama arcview che ha una funzione chiamata hotlink che praticamente permette di mandare in esecuzione qualsiasi file, il fatto è che io uso questo hotlink in modo che un utente quando clicca su un comune automaticamente lancia il .jar associato, quindi l'uscita di una JOptionPane che richieda il comune sarebbe superflua...Io vorrei fare una cosa del tipo mioProgrammaGenerale.jar -UnComune.. Devo solo capire come passare il parametro al main quando richiamo il .jar:( ..

andbin
18-06-2007, 12:41
Io vorrei fare una cosa del tipo mioProgrammaGenerale.jar -UnComune.. Devo solo capire come passare il parametro al main quando richiamo il .jar:( ..java -jar file.jar argomenti......

PGI-Bis
18-06-2007, 12:42
E non puoi lanciare il jar con un parametro? Un po' come i collegamenti ad un eseguibile, prima c'è il percorso dell'eseguibile e poi la lista di parametri. L'esecuzione del collegamento causa l'esecuzione del programma collegato con il passaggio dei parametri specificati nel collegamento.

Quei parametri arrivano al programma java come stringhe nell'array del metodo main. Detto altrimenti, se dico:

java Main Foggia

o

java -jar Programma.jar Foggia

o

javaw Programma.jar Foggia

in tutti e tre i casi il primo componente dell'array di stringhe parametro del metodo main è Foggia.

tony.www
18-06-2007, 12:44
E non puoi lanciare il jar con un parametro? Un po' come i collegamenti ad un eseguibile, prima c'è il percorso dell'eseguibile e poi la lista di parametri. L'esecuzione del collegamento causa l'esecuzione del programma collegato con il passaggio dei parametri specificati nel collegamento.

Quei parametri arrivano al programma java come stringhe nell'array del metodo main. Detto altrimenti, se dico:

java Main Foggia

o

java -jar Programma.jar Foggia

o

javaw Programma.jar Foggia

in tutti e tre i casi il primo componente dell'array di stringhe parametro del metodo main è Foggia.

Perfetto proprio questo cercavo, adesso ci provo è ti faccio sapere.
Grazie :)

PGI-Bis
18-06-2007, 12:44
Il "Bis" in PGI significa che io ripeto sempre quello che dice chi risponde prima di me. E' un vezzo personale, che volete farci.

Ora e sempre, vaffhttp.

tony.www
18-06-2007, 12:56
Grazie!! Funziona perfettamente.. Solo una cosa ogni volta che clicco sul collegamento parte anche la shell di windows, c'è un modo per evitarlo?

andbin
18-06-2007, 13:03
Grazie!! Funziona perfettamente.. Solo una cosa ogni volta che clicco sul collegamento parte anche la shell di windows, c'è un modo per evitarlo?javaw invece di java

PGI-Bis
18-06-2007, 13:06
Mhhhh... non so, forse è per via di quel sistema hotlink che non conosco. A me i collegamenti ai jar partono senza console, com'è normale che sia per windows con javaw.exe (e lo stesso si fa in Linux con java, anche se non ricordo come ora).

tony.www
18-06-2007, 13:10
Adesso funziona tutto... Alla fine ho solo creato un collegamento al file .jar e nella destinazione ho messo nome.jar parametro è mi funziona perfettamente.. Spero solo che se lo passo in un altro pc funzioni correttamente senza che metto mano alle varie jdk,jre :D.

Grazie per l'aiuto siete sempre preparatissimi su questo forum:)

Ultrabyte
04-07-2007, 15:14
Salve siccome mi è di vitale interesse la vostra discussione in quanto anche io mi trovo ad avere un caso simile a tony.www e avendolo risolto vorrei sapere com'è che richiami la classe ora perche io facendo

java Nomeclasse parametro1 parametro2 e parametro3
mi viene generato un errore che indica java.lang.NoclassDefFoundError

e che il nome della classe è sbagliato quando in realtà non e' sbagliato per niente qualcuno di voi sa darmi una risposta grazie

andbin
04-07-2007, 15:19
Salve siccome mi è di vitale interesse la vostra discussione in quanto anche io mi trovo ad avere un caso simile a tony.www e avendolo risolto vorrei sapere com'è che richiami la classe ora perche io facendo

java Nomeclasse parametro1 parametro2 e parametro3
mi viene generato un errore che indica java.lang.NoclassDefFoundError

e che il nome della classe è sbagliato quando in realtà non e' sbagliato per niente qualcuno di voi sa darmi una risposta grazieCosa hai in classpath? Se lanci con java -cp . blabla...... funziona?

Ultrabyte
04-07-2007, 17:52
Grazie per la risposta alla fine dopo svariati tentativi sono riuscito a capire come settare il classpath il problema ora pero me lo tovo piu avanti perchè ci sono altre classi richiamate al suo intenro.Una di queste ha bisogno della libreria di log4j...ora per settare la lib cosa devo usare

-agentlib:<libname>[=<options>]
load native agent library <libname>, e.g. -agentlib:hprof
see also, -agentlib:jdwp=help and -agentlib:hprof=help
oppure...
-agentpath:<pathname>[=<options>]
load native agent library by full pathname

Ultrabyte
04-07-2007, 18:09
utilizzando questa istruzione
Path della libreiria: \Documents and Settings\Cartella1\Cartella2\Cartella3\lib
Path della classe: \Documents and Settings\Cartella1\Cartella2\Cartella3\src\Cartella4\Cartella5\Cartella6\Cartella7\Cartella8\CLass


questi sono i percorsi a partire da C:\


Ora avendo questi due path a vostra disposizione come custruireste le informazioni per lanciare il comando java che setti appunto il classpath e la libreria ??
io ho provato in tutti i modi ottenendo questo messaggio d'errore


Error occurred during initialization of VM
Could not find agent library in abslolute path: C:\Cartella1\Cartella2\Cartella3\lib


L'unica cosa che ho capito e' che ovviamente non riesce a trovare la libreria nel path specificato ma non so allora come passargliela o forse ci vuole il ...-agentpath:
mi affido a voi grazie in aticipo per le risposte