View Full Version : [JAVA & NetBeans] come importo dei .class ?
javacomelava
25-01-2010, 10:18
Ragazzi ho un problema con netbeans.
Ho dei file .class (ho solo il .class e non i sorgenti .java).Come faccio ad importarli in un progetto netbeans?
Ho provato a fare un jar,quindi a inserirli come librerie,ma niente,non me li vede!
Sto scelrando per una stupidaggine.Qualcuno sa come posso fare?
saluti
prova ad aggiungere la cartella contenente i file class. Potrebbe comunque essere un problema di package, nel senso che se il tipo dichiarato nel file class x appartiene al package pippo deve trovarsi in una cartella "pippo" (anche nel jar).
javacomelava
25-01-2010, 15:12
Allora, ho questi 2 .class nella cartella InputLib:
InputLib
|
|_ Input.class
|_ ReadStream.class
Ho creato un MANIFEST.MF con la sola riga di intestazione:
Manifest-Version: 1.0
mi sono posizionato nella cartella padre di InputLib,dove ho memorizzato il MANIFEST.MF e ho dato il comando:
C:\prova> jar cvf InputLib.jar InputLib/Input.class InputLib/ReadStream.class
aggiunto manifesto
aggiunta in corso di: InputLib/Input.class (in = 886) (out = 433) (compresso 51%)
aggiunta in corso di: InputLib/ReadStream.class (in = 4378) (out = 2487) (compresso 43%)
Importo in NetBeans e niente non lo vede...
Se scrivo:
import InputLib.*;
mi da: Unused Import
Se scrivo:
import InputLib.Input;
mi da errore dicendo che il file non esiste.
che sclero!
banryu79
25-01-2010, 17:10
*EDIT: doppio*
banryu79
25-01-2010, 17:24
Il warning dell'IDE "Unused import" non e' un errore: ti sta solo avvisando che quell'import si riferisce a entità (classi e/o altro) che non sono attualmente usate nell'unità di compilazione corrente (il tuo file java).
Comunque, supposto di avere tutti i .class in una cartella (ad esempio "Pippo"):
click destro sul nodo del progetto nella vista Projects, si apre il menu contestuale, click su Properties, si apre la finestra delle proprieta' di progetto, click su Libraries, viene visualizzata la tab del gestore delle librerie, click sul bottone "Add JAR/Folder" e si apre il file browser mediante il quale selezionata la cartella "Pippo" (con singolo click ovviamente) e confermata la scelta con il bottone "Apri" se a cavallo.
Ora vai in un bel file .java del tuo progetto e, immaginando che ti serva usare la classe pubblica FooUtilities ne dichiari un'istanza: sara NetBeans stesso che ti segnalera' un errore e mediante selezione di un apposito tooltip (click sulla lampadina accesa a inizio della riga incriminata) ci pensera' lui a inserire l'import.
Ovviamente puoi sempre farlo a mano.
javacomelava
25-01-2010, 22:38
So che non è un errore l'unused import però all'istruzione
Input.readInt();
mi da errore dicendomi che non esiste la classe Input,nonostante io abbia importato i .class.
Ho provato a seguire anche le tue istruzioni ma niente,non va....non le vede e non capisco perche!
banryu79
26-01-2010, 08:53
Hai già verificato che il problema non sia quello evidenziato da PGI?
Potrebbe comunque essere un problema di package, nel senso che se il tipo dichiarato nel file class x appartiene al package pippo deve trovarsi in una cartella "pippo" (anche nel jar).
Per farlo puoi usare javap, il class file disassembler distribuito nel JDK.
Se vai nella cartella di installazione del JDK, dentro la cartella "docs" trovi un file index.html: aprilo, scorri la pagina fino a trovare il link "JDK Tool and Utility Documentation", cliccalo, quindi nella nuova pagina clicca il link "Basic Tools": nella lista dei basic tools c'è anche il link per la documentazione di javap.
In breve ti basta lanciarlo e passargli come argomento il nome di una classe, per esempio Input: javap stampa sullo standard output della tua macchina tutta una serie di informazioni su quel file .class.
In questo modo puoi vedere il nome esteso della classe, e capire quindi in che package (e di conseguenza in che cartella) vuole essere contenuta.
Ti allego uno screen d'uso di javap:
http://www.freeimagehosting.net/uploads/b8cf353a03.png (http://www.freeimagehosting.net/)
Si evince che la classe "ApplicationStarter" deve essere contenuta nel package "ecoguardian", e quindi in una cartella omonima.
javacomelava
26-01-2010, 10:20
mmm innanzitutto ti dico che non conoscevo questo programmino javap...molto carino...ma purtroppo niente...ho provato,e le classi in oggetto non sono contenute in alcun package:
http://www.freeimagehosting.net/uploads/a25fe5b468.jpg (http://www.freeimagehosting.net/)
Bah,mi sembra una situazione paradossale...anzi...una minch**** paradossale non riuscire ad uscire da questa situazione patetica,che rabbia,spaccherei netBeans....
banryu79
26-01-2010, 11:52
Allora credo sia normale: ho fatto una prova anche qui, creando una classe nel cosidetto "default package" di progetto in NetBeans, che poi significa scrivere una classe in un'unità di compilazione omettendo l'iniziale dichiarazione di package.
// package unnome
class NonImportabile
{
// bla bla...
}
Adesso ho capito perchè quando si crea una nuova classe nell'IDE, se si lascia vuoto il text field per specificare il package della classe il Wizard da un warning che sconsiglia di non creare classi nel "default package" :asd:
A questo punto non so se si possa ovviare in qualche modo, avendo tu in mano solo i due .class e non i .java.
@EDIT:
Gesù, quando postate gli screen shot ridimensionateli almeno: se l'immagine è troppo grande sbarella (almeno a me) il layout della pagina in modo osceno...
Decompila i .class se puoi :p
banryu79
26-01-2010, 12:09
Decompila i .class se puoi :p
Posto un link (http://cavaj-java-decompiler.softonic.it/) per scaricare CavaJ, allora :)
Posto un link (http://cavaj-java-decompiler.softonic.it/) per scaricare CavaJ, allora :)
Sì anche io ho usato quello :D
javacomelava
26-01-2010, 22:20
Eh già....era una questione di path di package.Ho risolto,grazie per avermi indicato la strada.
Comunque fino a questo momento ho amato Netbeans,ma da oggi,dopo avermi fatto impazzire 5 giorni dietro questa cazzata orribilante(ma un'IDE non lo dovrebbe aiutare il programmatore??? )ho cominciato a rivalutarlo....
Dai...ma vi rendete conto che per utilizzare un .class stupidssimo,tocca fare reverse engeenering del file.class originali? Possibile che non abbiano tenuto conto del fatto che un sorgente non faccia parte di alcun package?
No no...io non ci sto...scusate lo sfogo ma sbroccare giorni dientro questa cosa mi ha fatto venire il vomito!
Scrivi una patch e mandagliela, qui ci sono le istruzioni:
http://netbeans.org/community/contribute/patches.html
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.