Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
HUAWEI WiFi Mesh X3 Pro Suite è probabilmente il router mesh più fotogenico che si possa acquistare oggi in Italia, ma dietro il guscio in acrilico trasparente e le luci LED dinamiche c'è una macchina tecnica costruita attorno allo standard Wi-Fi 7, con velocità teoriche Dual-Band fino a 3,6 Gbps e una copertura fino a 120 m² una volta abbinato il router principale all'extender incluso nel kit
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Abbiamo provato le nuove CPU Intel Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: più core e ottimizzazioni al funzionamento interno migliorano le prestazioni, anche in virtù di prezzi annunciati interessanti. A questo si aggiungono nuove ottimizzazioni software. Purtroppo, a fronte di prestazioni di calcolo elevate, il quadro rimane incerto nel gaming, dove l'andamento rimane altalenante. Infine, rimane il problema della piattaforma a fine vita.
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
Il modello "build to order" di PCSpecialist permette di selezionare una struttura base per un sistema, personalizzandolo in base alle specifiche esigenze con una notevole flessibilità di scelta tra i componenti. Il modello Lafité 14 AI AMD è un classico notebook clamshell compatto e potente, capace di assicurare una elevata autonomia di funzionamento anche lontano dalla presa di corrente
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-04-2010, 11:37   #1
Player1
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 1370
[JAVA]Come specificare il path relativo all'interno del file .JAR

Ciao a tutti, ho un problema abbastanza banale con la mia applicazione ma che non riesco a risolvere, spero che possiate darmi una mano.

Ho creato un programma java con Netbeans, esso è costituito dai 3 pacchetti:
program: Che contiene i file del programma, incluso il runme (main)
program.resources: Che contiene i file XML in cui sono inseriti i dati
program.images: Che contiene le immagini.

Se eseguo il programma mediante il comando "run" di netbeans tutto funziona correttamente.

Adesso vorrei distribuire il programma quindi vado nella cartella "dist" del progetto creato da netbeans, copio il file program.jar in un'altra cartella e, da prompt dei comandi, posizionandomi nella cartella in cui ho appena copiato il file digito "java -jar program.jar" .

Il programma inizia ad essere eseguito tuttavia quando raggiunge l'istruzione che deve leggere i dati da un file xml lancia una eccezione perchè il path che ho settato nel codice java non è più lo stesso, adesso infatti il file xml si trova in program.jar nella cartella resources.
Cosa devo inserire nella stringa path del mio programma java per fare in modo che il main vada a cercare il file nella cartella corretta?
Grazie

Ultima modifica di Player1 : 02-04-2010 alle 11:39.
Player1 è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2010, 13:31   #2
lupoxxx87
Senior Member
 
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
è meglio se crei l'archivio a mano...

segui il tutorial sun
http://java.sun.com/docs/books/tutor...jar/build.html

che spiega bene le variabili da aggiungere per includere altre cartelle al jar
lupoxxx87 è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2010, 14:48   #3
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Se nel package program.resources hai un file "bingo.xml" ottieni il suo url con:

URL url = getClass().getResource("/program/resources/bingo.xml");

La "/" iniziale significa che il percorso relativo che passi a getResource sarà risolto rispetto alla radice del classpath (che include il jar del programma).
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2010, 13:18   #4
Player1
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 1370
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
Se nel package program.resources hai un file "bingo.xml" ottieni il suo url con:

URL url = getClass().getResource("/program/resources/bingo.xml");

La "/" iniziale significa che il percorso relativo che passi a getResource sarà risolto rispetto alla radice del classpath (che include il jar del programma).
Con il tuo suggerimento ho fatto un passo avanti ma non riesco ancora ad accedere al file.

L'url che ottengo in questo modo è il seguente:
Codice:
jar:file:/C:/Users/Mionome/Desktop/dist/program.jar!/resources/properties.xml
Passo questa String come parametro alla classe File ma ancora non funziona.
Ecco quali sono i miei dubbi sulla stringa fornita dal metodo precedente:
1) La stringa inizia con "jar:file:/" E' corretto o devo usare un substring per eliminare questa parte?
2) Le barre sono così "/" e non così "\" è corretto o devo sostituirle? Uso windows come sistema operativo.
3) Dopo il nome del file program.jar viene inserito un punto esclamativo "!" perchè?
4) Il file program.jar viene visto nella stringa come una cartella ma in realtà è un file, può essere questo il motivo per cui passando questa stringa alla classe File() questa non riesce a trovare il file .xml?

Grazie!
Player1 è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2010, 14:04   #5
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
il "jar:file:" iniziale ti dice che il file si trova in un jar.

Non puoi aprire un java.io.File sul percorso di una risorsa che sta in un jar.

Sarebbe un po' come cercare di aprire un File su un indirizzo html, file ti dirà "hey, che è 'sta roba?".

Non a caso getResource risponde con un URL, che è più generale di java.io.File.

Ciò premesso, se vuoi leggere il documento bingo.xml puoi farlo senza passare da java.io.File:

URL url = getClass().getResource("/resources/properties.xml");
InputStream in = url.openStream();

o, direttamente:

InputStream in = getClass().getResourceAsStream("/resources/properties.xml");

Praticamente tutti gli strumenti che leggono qualcosa nelle librerie standard accettano un InputStream come sorgente. Per XML:

DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
DocumentBuilder db = fac.newDocumentBuilder();
Document xmlDoc = db.load(inputStream);

Nota che puoi leggere un documento impacchettato in jar ma non puoi scriverci sopra. Il file Jar è uno Zip, se modifichi una entry cambia la tabella di compressione e lo zip va riscritto.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2010, 15:59   #6
Player1
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 1370
Ora ho un problema con getClass(), questo metodo non è statico e non può essere richiamato dal main, come faccio ad utilizzarlo all'interno della mia applicazione?
Player1 è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2010, 16:01   #7
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
In un contesto statico puoi usare il letterale "class" nella forma NomeClass.class. Se la classe si chiama Main sarà: Main.class
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2010, 17:04   #8
Player1
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 1370
Grandioso! Finalmente funziona!!!
Grazie infinite!!!!
Player1 è offline   Rispondi citando il messaggio o parte di esso
Old 05-04-2010, 15:39   #9
Player1
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 1370
Salve di nuovo, scusate se rompo ancora le scatole ma si è manifestato un nuovo problema che credo sia sempre legato a quello del path all'interno del file jar.
Con questo programma vorrei fornire un server RMI che si registra sull'rmiregistry e rimane in attesa di chiamate rmi eseguite da un client remoto.

Il file distribuibile si chiama program.jar
Questo file ha la seguente struttura (semplificata):
Codice:
program.jar\program\runme.class
program.jar\program\RMIServer.class
program.jar\commObjects\RMIInterface.class
Il primo file è quello che viene eseguito e contiene il main le parti importanti del codice sono le seguenti:
Codice:
package program;

import commObjects.RMIInterface;
...

public class runme {
	public static void main(String args[]){
		runme r = new runme();
		try {
			RMIInterface server = new RMIServer(...);		
			Naming.rebind("localhost/program", server);
		}
		catch (RemoteException e) {
			e.printStackTrace();
		}
		catch (MalformedURLException e) {
			e.printStackTrace();
		}
    }
}
Questa è la struttura del file RMIServer:
Codice:
package program;

import commObjects.RMIInterface;
...

public class RMIServer extends UnicastRemoteObject implements RMIInterface {
...
}
ed infine il file di interfaccia che RMIInterface:
Codice:
package commObjects;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface RMIInterface extends Remote {
...
}
Apro il prompt dei comandi ed avvio l'rmiregistry.
A questo punto aprendo un altra finestra del prompt, mi posiziono nella cartella in cui è presente il file program.jar e lancio java -jar program.jar

Viene lanciata la seguente eccezione:
Codice:
java.rmi.ServerException: RemoteException occurred in server thread; nested exce
ption is:
        java.rmi.UnmarshalException: error unmarshalling arguments; nested excep
tion is:
        java.lang.ClassNotFoundException: commObjects.RMIInterface
        at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:396
)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
...
Tale eccezione viene lanciata dall'istruzione:
Naming.rebind("localhost/program", server); presente in runme.class

Credo che il problema sia dovuto al fatto che poichè l'interaccia si trova in program.jar\commObjects\ l'rmiregistry non riesce a trovarla.

Come faccio a risolvere il problema in questo caso?
Grazie
Player1 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
L'ambiziosa base lunare permanente sulla...
Litografia BEUV (Beyond-EUV): la startup...
SAP e l'IA agentica: dall'hype alla matu...
'Abbiamo raggiunto l'AGI': Jensen Huang ...
Claude ora usa il mouse e la tastiera al...
Analisi Opensignal 2026: TIM si prende l...
Revolut sfida le grandi banche: utile da...
La NASA parla del futuro delle missioni ...
HP TPM Guard chiude la falla di BitLocke...
HP Imagine 2026: dalle workstation con c...
HP IQ: 20 miliardi di parametri sul PC, ...
Claude Code, il piano Max brucia la quot...
Scoperto un secondo esopianeta nel giova...
Account inaccessibili su Windows 11: Mic...
OpenAI punta sull'energia da fusione: tr...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:31.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v