Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    26

    riuso progetto java/javaswing

    Buongiorno ragazzi... sono giorni che cerco di capire cosa e come devo fare per far funzionare il progetto di un'applicazione, fatta dai miei colleghi di università, sul mio pc.
    E' un progetto d'esame svolto come lavoro di gruppo, in cui l'implementazione poi era individuale. E' un'applicazione rubrica in cui io devo creare la funzione ricerca. Ora il problema è:
    come faccio a far girare l'applicazione da loro creata sul mio pc?
    la cartella del progetto contiene:
    -cartella .svn
    -cartella build
    -cartella dist
    -cartella nbprojec
    -cartella src
    -cartella test
    -file build.xml
    -file bild-before-profiler.xml
    -file db.text
    -file manifest.mf

    Ho letto che l'eseguibile è il file .jar nella cartella dist, ma se io ci clicco non succede nulla.
    Come faccio ad eseguire questo file?

    Sto proprio in altissimo mare!

  2. #2

    Moderazione

    Java ha una sezione apposita, sposto.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Probabilmente è un progetto Netbeans..nella cartella dist ci dovrebbe essere il jar dell'applicazione , in src ci dovrebbero essere i sorgenti.


  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    26
    sì sì c'è l'eseguibile e ci sono i sorgenti... ma se io volessi vedere, non come sviluppatore, ma come utente, l'applicazione da loro creata, come dovrei fare? dove devo farlo girare questo progetto? se clicco sul .jar non esegue niente, se da netbeans faccio il run del main mi da' errori vari!
    Insomma...teoricamente quella applicazione dovrebbe essere già funzionante, ma io non so come farla funzionare!

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Ti mancheranno le dipendenze.. Non ci stai dicendo che errori ottieni, possiamo solo tirare ad indovinare..
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Le cose sono due:
    -l'applicazione è priva di interfaccia grafica e magari funziona "da console" con il passaggio di eventuali parametri , ma visto che parli di swing dubito sia questo il caso
    -viene lanciata qualche eccezione (cosa molto probabile) dovuta a qualche riferimento non trovato o altro..

    Prova a lanciare il jar in dist da linea di comando così puoi vedere ed eventualmente postare l'eccezione ottuta.


  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    26
    innanzitutto voglio ringraziarvi per l'aiuto!


    Le cose sono due: -l'applicazione è priva di interfaccia grafica e magari funziona "da console" con il passaggio di eventuali parametri , ma visto che parli di swing dubito sia questo il caso -viene lanciata qualche eccezione (cosa molto probabile) dovuta a qualche riferimento non trovato o altro..
    Allora, sì l'applicazione ha un'interfaccia grafica ovviamente, quindi siamo nel secondo caso.

    Ti mancheranno le dipendenze.. Non ci stai dicendo che errori ottieni, possiamo solo tirare ad indovinare..
    Sì esatto, mi lancia delle eccezioni di qualcosa che manca...
    Prova a lanciare il jar in dist da linea di comando così puoi vedere ed eventualmente postare l'eccezione ottuta.
    ecco l'errore che mi dà:

    Exception in thread "main" java.lang.NullPointerException
    at control.CImmagini.<init>(CImmagini.java:65)
    at control.CImmagini.istanza(CImmagini.java:75)
    at control.CStartup.main(CStartup.java:35)
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at control.CImmagini.<init>(CImmagini.java:65)
    at control.CImmagini.istanza(CImmagini.java:75)
    at presentation.componenti.backgroundedFittedLayeredP ane.<init>(backgrou
    ndedFittedLayeredPane.java:24)
    at presentation.PMAIN.<init>(PMAIN.java:57)
    at control.CStartup$1.run(CStartup.java:28)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPri vilege(Unknown Sour
    ce)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilter s(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(U nknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarch y(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

    Lo so ragazzi...sono un caso disperato ... vi ringrazio davvero!

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Apri il file CImmagini in src e posta la 65esima riga , dall'eccezione da te postata sembra che la causa sia là..

    Non vorrei dare conclusioni affrettate e alla cieca ma secondo me si tratta proprio di una qualche risorsa (probabilmente immagine) che non disponi , o che sta in un percorso diverso (problema magari dovuto al cattivo utilizzo di percorsi relativi/assoluti)


  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    26
    Ti posto tutto il file. Ti indico la riga 65. C'è un commento scritto dal ragazzo che ha fatto la classe in un progetto precedente, te lo lascio se può esserti utile.

    codice:
    package control;
    
    import java.awt.Image;
    import java.io.File;
    import java.io.IOException;
    import java.util.TreeMap;
    import javax.imageio.ImageIO;
    
    
    public class CImmagini
    {
        private static CImmagini unicaIstanza = null;
        private TreeMap<String,Image> icone;
    
        public CImmagini()
        {
            //istanzio icone
            this.icone = new TreeMap<String,Image>();
    
            //prelevo la lista (stringhe) dei files presenti nella cartella presentation/icone
            File f = new File(this.getClass().getResource("/presentation/icone").toString().substring(6));
            String[] arrayNomiFiles = f.list();
    
            //inserisco tutte le icone attraverso un ciclo "intelligente" che sfrutta la conoscenza dei files presenti in presentation/icone
            for(int i=0; i<arrayNomiFiles.length; i++)      //RIGA 65
            {
                try {this.icone.put("/presentation/icone/"+arrayNomiFiles[i], ImageIO.read(getClass().getResource("/presentation/icone/"+arrayNomiFiles[i])));}
                catch (IOException ex) {System.out.print("ERRORE di lettura dell'icona\n");}
            }
        }
    
        //metodo di classe che si occupa di recuperare il puntatore all'unica istanza della classe
        public static CImmagini istanza()
        {
            if (unicaIstanza == null) unicaIstanza = new CImmagini();
            return unicaIstanza;
        }
    
        //metodo per ottenere un'icona
        public Image getImage(String relativePath) {return this.icone.get(relativePath);}
    }
    
    /** * * @author Alessandro
     *
     * Classe di FONDAMENTALE importanza per le PRESTAZIONI dell'applicazione. Premesso che:
     * - l'applicazione è composta da IMMAGINI, di due tipi
     * • A) relative alla grafica ovvero all'interfaccia del programma (icone, pulsanti, sfondi di Panel, ecc.)
     * • B) contenenti informazioni e dunque prelevate dal DB (locandine degli spettacoli, loghi dei cinema, foto dei cinema)
     * - il tipo A è preponderante rispetto al tipo B, ed inoltre non è il risultato di una query pertanto il suo utilizzo è CERTO e dunque PREVEDIBILE
     * - ogni componente che utilizza il tipo A prelevava le immagini (nella versione precedente di questa applicazione) attraverso la libreria ImageIO
     * ovvero LEGGENDO DA FILE OGNI volta che il componente veniva istanziato
     * - poteva capitare benissimo (vedi schermata PIFOrario) che 50 istanze dello stesso componente (ad esempio il pulsante per il GIORNO) ogni volta
     * che venivano istanziate (50 istanze) leggessero da file, dallo STESSO file!!! (50 letture dallo stesso file)
     * - la lettura da FILE è lenta, anche più di un accesso al DB
     * - l'applicazione risultava molto lenta nel passaggio da una schermata all'altra e nell'interazione con l'utente
     *
     * L'idea che mi è venuta e la conseguente sua realizzazione sono descritte dai seguenti punti:
     * • le immagini utilizzate sono TANTE (attualmente 207 ma potrebbero raggiungere anche 400) e PICCOLE (mediamente 20-30 KB)
     * • perchè non caricarle tutte in RAM all'avvio (30KB x 400 = 12 MB) e renderle disponibili, invece di leggerle da file ogni volta?
     * • per far ciò è necessaria una classe (QUESTA) avente unica istanza che alloca tutto in RAM la prima volta e poi, su richiesta, fornisce l'imma-
     * gine desiderata
     * • la struttura dati più consona al nostro caso è una TreeMap <chiave, valore> in cui
     * - <chiave> = stringa contenente il percorso RELATIVO dell'immagine (ES.: "/presentation/icone/pulsante_avanti.png"), questo per evitarMI di es-
     * sere costretto ad andare a modificare tutte le classi dove si usava il percorso relativo per individuare l'immagine
     * - <valore> = l'immagine desiderata
     * • tale struttura dati sfrutta gli algoritmi sugli alberi binari di ricerca (BST) per restituire un elemento con getElemento(chiave x) in tempo
     * O(logn) dove n è la dimensione dell'input (nel nostro caso n = 400 => t = log400 = circa 9-10 colpi di clock!!!!)
     * • si tratta semplicemente di leggere da file tutte le immagini UNA SOLA VOLTA (avvio del programma). Quali immagini? TUTTE quelle contentute nel-
     * la cartella /presentation/icone (farò un ciclo per questo)
     * • dal momento che le classi che costruiscono la grafica sono quelle contenute in presentation.componenti è bastato andare in ciascuna di esse e
     * sostituire la lettura da file mediante ImageIO.read(path_relativo) con la chiamata CImmagini.istanza().getImage(path_relativo)
     *
     * NOTA : le prestazioni sono migliorate del 70-80 % (ho eseguito il test con lo strumento "Profile" di Netbeans)
     * NOTA2: "Sì, ma io che cacchio devo fare?" potreste chiedervi a questo punto.
     * - beh le classi che costruiscono la grafica sono già pronte,quindi dovete solo utilizzarle (ES.: new backgroundedButton("/presentation/icone/pul-
     * sante_avanti.png")
     * - se avete la necessità in ualunque momento ed in qualunque classe di ottenere un'immagine di tipo A (ovvero quelle in /presentation/icone) NON
     * utilizzate ImageIO.read(path_relativo) ma utilizzate CImmagini.istanza().getImage(path_relativo)
     * - se avete la necessità di ottenere un'immagine di tipo B (ovvero quelle del DB) ovviamente potete usare ImageIO
     */
    
    L'albero delle directory è:
    codice:
    src:
    -control
    -presentation
            -icone
    -...
    E' uno sbaglio di path relativo?

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Non vorrei dire baggianate , ma suppongo che i file a cui si fa riferimento nel codice sono file contenuti dentro il jar , e proprio per questo motivo penso che il problema sia dovuto all'utilizzo del metodo getResource ("blablabla") , quando si cerca di "riferire" file contenuti nel jar si dovrebbe usare invece il metodo getResourceAsStream ("blablabla")..dunque dovresti modificare il codice (sostituendo tutti i "getResource" con "getResourceAsStream"), ricompilare il tutto e poi prova ad eseguire.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.