[ gagacar @ 16.08.2014. 13:15 ] @
Kreiram u Javi desktop aplikaciju koja koristi Accessovu bazu. Za izveštaje koristim jasperreport.

Problem je sledeći: kada preko Netbeensa pokrenem aplikaciju, sve radi kako treba, izveštaji se otvaraju i sve je ok.

Kada jar fajl prekopiram u neki drugi folder i pokrenem ga iz tog fildera sve isto radi, ali izveštaje mi ne otvara.

Dugme preko kojeg se otvara izveštaj ima sledeći kod:

Code:


String report = "E:\\JAVA\\db\\src\\repIzvestaj.jrxml";
       
       try {
           String yyy = txt_id.getText();
           int xxx = Integer.parseInt(yyy);
           Map   parameter=  new HashMap();
           parameter.put("pom_id",xxx); 
           
           JasperReport jasp_rep = JasperCompileManager.compileReport(report);
           JasperPrint jasp_print = JasperFillManager.fillReport(jasp_rep, parameter, conn);
           JasperViewer.viewReport(jasp_print);
           
           JasperViewer jrviewer = new JasperViewer(jasp_print); 
           jrviewer.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE );
       }
       catch(Exception ex)
       {
           JOptionPane.showMessageDialog(null, ex);
       }



Nije mi jasno zašto neće da otvori kada se jar fajl startuje iz nekog drugog foldera, kada ima apsolutnu putanju do izveštaja?

Da li neko može da mi pomogne? Hvala unapred!!!


[Ovu poruku je menjao gagacar dana 16.08.2014. u 16:45 GMT+1]
[ abyss @ 18.08.2014. 07:16 ] @
Mozda da iskopiras gresku koju javlja?
[ BoLa @ 24.10.2014. 12:46 ] @
Hard kodirane putanje unutar koda nisu bas dobra praksa.

Kopiraj report unutar java projekta ( recimo u folder /reports ) tako da ti se i on builda u jar. Koristi report loader za ucitavanje reporta ( .jasper ).
Primjer:
Klasa za ucitavanje reporta ( stavi je u isti folder gdje drzis reporte )
Code:

package reports;

import java.io.InputStream;


public class ReportLoader
{
   public ReportLoader()
   {
   }

   public InputStream getReport(String name)
   { 
      InputStream in = getClass().getResourceAsStream(name+".jasper");
     
      return in;
   }
}


Ucitavanje reporta u tom slucaju ide:
Code:

        ReportLoader rl = new ReportLoader();
        InputStream url2 = rl.getReport("neki_report");
        HashMap paramsForRecipeForm= new HashMap();
        paramsForRecipeForm.put("id_parametar",this.ID);
        setConnection();
        JasperPrint jasperPrint;
        try {
            jasperPrint = JasperFillManager.fillReport(url2, paramsForRecipeForm, con);
            JasperViewer.viewReport(jasperPrint, false);
            
        } catch (JRException e) {
            JOptionPane.showMessageDialog(this,"Exception","Exc"+e.getMessage(),JOptionPane.ERROR_MESSAGE);
            e.printStackTrace();
        }