Научи ме

Обяви => Проекти => Темата е започната от: Meniak в 02 Ноември 2014, 22:03:36

Титла: Програма за магазин
Публикувано от: Meniak в 02 Ноември 2014, 22:03:36
Реших с наученото до сега за Java (до колко правилно и до колко кривилно вие кажете) да напиша някаква програмка.

Племеницата ми има магазинче - железария - и артикулите ги описваше на един екселски файл като сама смяташе отписваше дописваше и т.н.т. когато продава или доставя артилули. Аз я попитах защо не използва някоя складова програма? има ги безплатни в интернет а тя каза че са прекалено заангажираци, на нея и трябвало нещо по просто.
И реших аз да напиша нещо просто което да е като екселския файл ама поне изчисленията да прави само.
Написах тази програмка която споделям с вас и и я дадох да я тества под предлог че не съм сигурен това дали ще сработи но не стига че работелело правилно ми и неини колеги на който тя се похвалила я искаха да си работят с нея.

Та понеже интереса кам тази програмка ме запали да си я развивам искам да попитам за вашето мнение за кода, за програмата, изобщо тръгва ли на вашите компщтри, за абсолючно всичко. И втората причина поради която искам да си развивам програмката е че тя е първото мое проектче което не е мъртво родено а вижда реализация за разлика от доста код дето сам изписал до сега.

Програмата е писана на Java и изискава инсталиран JDK минимум 1.8.0
Програмата не е тествана какработи под Linux и се съмнявам да няма кривинки в дизайна на прозорците.

Линк за сваляне: http://dox.bg/files/dw?a=dc41d88dad

Линк към Github: https://github.com/Meniak/Magazin в папката src се намира кода на програмата - NetBeans качи целия проект :D
Титла: Re: Програма за магазин
Публикувано от: Wanderer в 02 Ноември 2014, 22:14:08
Не съм ти пробвал приложението, но кода ти е ужасен! 
Титла: Re: Програма за магазин
Публикувано от: Meniak в 02 Ноември 2014, 22:16:59
Много ше съм благодарен. Не съм на ясно с много неща и искам да ги ознам.
Титла: Re: Програма за магазин
Публикувано от: HD в 03 Ноември 2014, 08:55:06
@Wanderer a твоя първи проект как изглеждаше?
@Маniak браво за положените усилия. Прави добро впечатление, че си направил github репо, което е нетипично за прохождащи в занаята.
Титла: Re: Програма за магазин
Публикувано от: Meniak в 16 Ноември 2014, 17:03:44
Здравейте. Качвам представям подобрена версия на програмата ми.

Новото в програмата е че когато в сметка имаме записи надписа на бутона сметка става червен и не е нужно да проверяваме всеки път дали имаме записи в сметката.

Всъщност целта на бутона сметка е да избегнете работата с калкулатор за да изчислите сумата която трябва да плати клиента, просто продавате артикулите и те се добавят към сметка след като клиента приключи с поръчките отваряте сметка и виждате каква е сумата за плащане на всеки един артикул по единично и общо.

Другото ново нещо е че програмата копира папката Store ( която всъщност е базата данни на програмата ) в папката Backup при всяко стартиране на програмата и ако базата данни на програмата се повреди ( както вече ми се случи ) можем да си заредим работеща база данни от последното включване на програмата.

Програмата вече е и с инсталатор.

Програмата е лицензирана под GNU GPL лиценз и изисква инсталиран JDK 1.8.0 минимум.

Линк за сваляне  :  http://dox.bg/files/dw?a=cdffdd8ba4

Линк към Github  :  https://github.com/Meniak/Magazin

Кода все още ми е ужасно написан защото не знам как да го напиша както трябва.

Титла: Re: Програма за магазин
Публикувано от: HanKrum в 16 Ноември 2014, 18:28:25
Дай шорткъти скрийншоти за да видим как изглежда и ко има вътре.
Титла: Re: Програма за магазин
Публикувано от: Wanderer в 16 Ноември 2014, 18:49:14
@Wanderer a твоя първи проект как изглеждаше?

И моя, то между другото все още си ми е ужасен  ;D

Цитат
Дай шорткъти за да видим как изглежда и ко има вътре
Да нямаш предвид screenshots ?


-----------------------------------------------------------------------------------------------------------------
Защо кода  е лош:

-Не е ООП
--кода е само статични методи
-- дори тези които не са статични - могат да бъдат, защото “класовете“ ти нямат никакво вътрешно състояние например виж Reports.java, Edit.java, Help.java  и други
--някои класове имат ужасни имена - DS, DD, VP, BackupDatabase  ??? Името на класовете трябва да е съществително
--защо гореизброените класове ползват Simple-Whatever-Property вместо string, double , etc ? Така и така получават примирно string и връщат string - от какъв зор тогава ползваш SimpleStringProperty ?
--getter, setter са antipatterns, нищо, че java beans са изградени върху тях. Правилото е “TELL! DON'T ASK!" - или казано с повече думи - класовете, които съдържат информацията трябва да вършат работата.

По-късно може да добавя още неща
Титла: Re: Програма за магазин
Публикувано от: Meniak в 16 Ноември 2014, 18:58:47
(http://www.img-share.eu/f/images/37/mainScreenP7VJx2b_thumb.png) (http://www.img-share.eu/main/image_view/mainScreenP7VJx2b.png.htm)
(http://www.img-share.eu/f/images/37/editMenuizlM96w_thumb.png) (http://www.img-share.eu/main/image_view/editMenuizlM96w.png.htm)
(http://www.img-share.eu/f/images/37/editUnitsQhdH1N_thumb.png) (http://www.img-share.eu/main/image_view/editUnitsQhdH1N.png.htm)
(http://www.img-share.eu/f/images/37/spravkiqCjUGh3_thumb.png) (http://www.img-share.eu/main/image_view/spravkiqCjUGh3.png.htm)
(http://www.img-share.eu/f/images/37/spravkiprodajbibaJs2rZ_thumb.png) (http://www.img-share.eu/main/image_view/spravkiprodajbibaJs2rZ.png.htm)
(http://www.img-share.eu/f/images/37/spravkiprodajbiyEGxncD_thumb.png) (http://www.img-share.eu/main/image_view/spravkiprodajbiyEGxncD.png.htm)
Титла: Re: Програма за магазин
Публикувано от: HanKrum в 16 Ноември 2014, 19:22:50
Изглежда доста прилично ;)
Титла: Re: Програма за магазин
Публикувано от: Meniak в 16 Ноември 2014, 19:32:29
Мерси аз по принцип не мога да правя дизайни защото нямам усет да направя нещо красиво, но щом това ти харесва значи имам напредък. Епа ако се барне това и с малко CSS ще светне.
Титла: Re: Програма за магазин
Публикувано от: Meniak в 16 Ноември 2014, 23:03:23

Защо кода  е лош:

-Не е ООП
--кода е само статични методи
-- дори тези които не са статични - могат да бъдат, защото “класовете“ ти нямат никакво вътрешно състояние например виж Reports.java, Edit.java, Help.java  и други
--някои класове имат ужасни имена - DS, DD, VP, BackupDatabase  ??? Името на класовете трябва да е съществително
--защо гореизброените класове ползват Simple-Whatever-Property вместо string, double , etc ? Така и така получават примирно string и връщат string - от какъв зор тогава ползваш SimpleStringProperty ?
--getter, setter са antipatterns, нищо, че java beans са изградени върху тях. Правилото е “TELL! DON'T ASK!" - или казано с повече думи - класовете, които съдържат информацията трябва да вършат работата.

По-късно може да добавя още неща

Благодаря че ме насочи какво да гледам.
Титла: Re: Програма за магазин
Публикувано от: jazzman в 18 Ноември 2014, 02:04:13
Няма какво да добавя щото съм далеч от Java, но браво за усилията които полагаш, виждам резултати и още..... благодаря, че пишеш и споделяш в научиМе.
Титла: Re: Програма за магазин
Публикувано от: HD в 18 Ноември 2014, 17:20:59
Браво за усилията и от мен. Хубаво изглежда на външен вид.  Само остава да изпълниш съветите на @wanderer,  които общо взето важат за всеки един език за програмиране с обектен модел. Давай смело и продължавай напред. Пък с каквото може ще помагаме.
Титла: Re: Програма за магазин
Публикувано от: Meniak в 18 Ноември 2014, 18:08:00
Мерси много. работа по съветите на @wanderer но ми е трудно да асимилирам това

Защо кода  е лош:

-Не е ООП
--кода е само статични методи
-- дори тези които не са статични - могат да бъдат, защото “класовете“ ти нямат никакво вътрешно състояние например виж
Reports.java, Edit.java, Help.java  и други.
Титла: Re: Програма за магазин
Публикувано от: Wanderer в 18 Ноември 2014, 20:00:36
Съществуват няколко подхода (ако може да се нарекат така) към програмирането:
-процедурно - данните и логиката , която се изпълнява върху тях са разделени.
-ООП - данните и логиката, която се изпълнява върху тях са едно.

Двата подхода имат различни плюсове и минуси. Например при ООП е много по-лесно да дефинираш нов тип данни (клас) или да промениш вече съществуващ, но пък е много по-трудно да добавиш логика, която се изпълнява върху него. Докато при процедурното програмиране е обратното. Там е много по лесно да добавиш нова функция, която работи върху дадена структура, отколкото да промениш вече съществуваща структура.

Виждам, че си преименувал файловете, та сега ми е трудно да се ориентирам :D Нека разгледаме:

Код: Java
  1. public class ReportsWindow {
  2.  
  3.     public void referenceSales() throws IOException {
  4.         Parent root = FXMLLoader.load(getClass().getResource("/screens/DailySalesScreen.fxml"));
  5.         Stage stage = new Stage();
  6.         Scene scene = new Scene(root);
  7.  
  8.         stage.setTitle("Справка дневни продажби");
  9.         stage.initModality(Modality.APPLICATION_MODAL);
  10.         stage.setResizable(false);
  11.         stage.initStyle(StageStyle.UTILITY);
  12.         stage.setScene(scene);
  13.         stage.show();
  14.     }
  15.  
  16.     public void referenceSupply() throws IOException {
  17.         Parent root = FXMLLoader.load(getClass().getResource("/screens/DailyDeliveriesScreen.fxml"));
  18.         Stage stage = new Stage();
  19.         Scene scene = new Scene(root);
  20.  
  21.         stage.setTitle("Справка дневни доставки");
  22.         stage.initModality(Modality.APPLICATION_MODAL);
  23.         stage.setResizable(false);
  24.         stage.initStyle(StageStyle.UTILITY);
  25.         stage.setScene(scene);
  26.         stage.show();
  27.     }
  28. }
  29.  

Защо горните два метода не са статични ? Защо трябва да направя инстанция на класа за да ги използвам ?
Също се забелязва 100% дублиране на код. Така е по добре, въпреки че такива utility методи са code smell.

Код: Java
  1. public class ReportsWindow {
  2.  
  3.     public static void utilityWIndow(String title, URI pathToFxml) throws IOException  {
  4.         Parent root = FXMLLoader.load(pathToFxml);
  5.         Stage stage = new Stage();
  6.         Scene scene = new Scene(root);
  7.  
  8.         stage.setTitle(title);
  9.         stage.initModality(Modality.APPLICATION_MODAL);
  10.         stage.setResizable(false);
  11.         stage.initStyle(StageStyle.UTILITY);
  12.         stage.setScene(scene);
  13.         stage.show();
  14.     }
  15.  
  16.     public static void referenceSales() throws IOException {
  17.         utilityWIndow("Справка дневни продажби", getClass().getResource("/screens/DailyDeliveriesScreen.fxml"));
  18.     }
  19.  
  20.     public static referenceSupply() throws IOException {
  21.         utilityWIndow("Справка дневни доставки", getClass().getResource("/screens/DailySalesScreen.fxml"));
  22.     }
  23. }

Не съм запознат с JavaFX-a така че не мога да ти кажа как точно да си организираш кода, но само статични методи не е добре. Също избягвай повторението, където е възможно.
Титла: Re: Програма за магазин
Публикувано от: Meniak в 18 Ноември 2014, 20:43:25
Промених имената защото наистина бяха калпаво измислени. По принцип слагам имена на класове който говорят за съдържанието на този клас ReportsWindow - СправкиПрозорци или в тоя клас има методи който викат скринове за справките в програмата и метода referenceSales - справкаПродажби и т.н.т. Иначе не знам как е общо прието ако има въобще правило.

Ползвам статични методи именно заради причината да не правя инстанций. Двата метода referenceSales и referenceSupply не могат да бъдат статични или поне по начина който сам ги написал - non-static method getClass() cannot be referenced from a static context.

За повторението на кода!!! Старая се да не се повтарям но още избистрям нещата.
Титла: Re: Програма за магазин
Публикувано от: Wanderer в 18 Ноември 2014, 21:05:39
Цитат
non-static method getClass() cannot be referenced from a static context.

ReportsWindow.class.getResource()

Няма нищо лошо в това да правиш инстанции. Без инстанции как ще се възползваш от неща като полиморфизъм и наследяване ?
Титла: Re: Програма за магазин
Публикувано от: kjufte в 25 Януари 2015, 18:11:46
Денс се борих малко с твоя проект, но не издържах  и се отказвам за сега  ;D

Ще ти дам и аз няколко препоръки по реда на мъките ми.

Първо не е лошо да добавиш в readme-то инфо за зависимостите на проекта ти, тъй като библиотеките не са включени в проекта.
Примерно apache commons-io, derby  и тнт. После няма да навреди един step by step как да го подкараме тоз нагазин. Таз база данни докато яподкарам ми посивяха, побеляха и па са оцветиха космите в ушите.

А докато се мъчех с derby ми направи впечатление един сериозен проблем който имаш с кода. Тез catch-клаузи не са, за да се принтират някви съобщения само, а за да се реагира на акана ситуация.
Примерно аз нямах jdbc driver и вместо да изтрещи и да умре апликацията само ми изписва една и съща грешка 3-4 пъти един след друг. Ето извадка от твоя код

Код: Java
  1. private static Connection con() {
  2.     try {
  3.         con = DriverManager.getConnection(host, userName, password);
  4.     } catch (SQLException e) {
  5.         System.out.println("DBConection error: " + e.getMessage());
  6.     }
  7.     return con;
  8. }
  9.    
  10. public static Statement stmt() {
  11.     try {
  12.         stmt = con().createStatement();
  13.     } catch (Exception e) {
  14.         System.out.println("Statement error" + e.getMessage());
  15.     }
  16.     return stmt;
  17. }

На 12-ти ред в метода stmt() викаш con(). На него му прилошава като се извика DriverManager.getConnection на 3-ти ред, но вместо да припадка, той пищи, че нямал подходящ драйвър и щастлив връща null. Та stmt() получава като резултат на con() null и се опитва да изпълни createStatement() на тоз null. Естествено, че и това пищи с NullpointerException и влиза в catch блока изписва грешката, но и на тоз метод не му пука, че нищо не работи и си връща и той щастлив един null.

Но това не е всичко :)  Цялата верига всъщност тръгва от класа MainScreenController, метода initialize, който вика един след друг разни други методи дето не се изпълняват като хората, но той си продължава да ги вика. Чак на метода searching() крашва и то защото по някаква случайност в него не хващаш генерално Exception-и, а само SQLException-и и тъй като се получава NullpointerException  апликацията крашва.

Подобен проблем имаш и в BackupDatabase. Там directoryExists() си му сложил, че хвърля IOException, но тоз ексепшън идва от FileUtils.copyDirectory, който викаш в copyFolder().
Получава се следното:
directoryExists() вика copyFolder(). Там изпищява някъв IOException, но ти в метода "обработваш" този ексепшън в catch блока, което означава че directoryExists() няма да го получи нивга.

Друг проблем  тука е код като този
Код: Java
  1. createDiectory();
  2. copyFolder(source, destination);

Ами ако createDiectory даде грешка? И там хващаш всякакви видове ексепшъни и ги принтираш/обработавш на екрана. И въпреки че нямаш направена директория викаш copyFolder().

Та като цяло мрънкането ми е на тема exception-и. Попрочети малко за тях, за try-catch-throw блокове и тнт.
Хващай специфични видове грешки и то само ако ще ги обработваш смислено. Само да ги принтираш не е смислено обработване.
А дори и да решиш само да ги принтираш, то добави някаква допълнителна инфорамция, която ще ти помогне да разбереш къде се е случил проблема. При един NullpointerException всичко което се изписва е "null".  Ходи търси от къде идва тоз надпис после :)

Колкото до структурата на кода и OOP мисля, че Wanderer ти е дал достатъчно насоки.
Титла: Re: Програма за магазин
Публикувано от: Wanderer в 25 Януари 2015, 18:33:27
Цитат
Първо не е лошо да добавиш в readme-то инфо за зависимостите на проекта ти, тъй като библиотеките не са включени в проекта.
Примерно apache commons-io, derby  и тнт. После няма да навреди един step by step как да го подкараме тоз нагазин. Таз база данни докато яподкарам ми посивяха, побеляха и па са оцветиха космите в ушите.

За да няма не разбрали, ще кажа как се прави това - всеки проект, без значение какъв е трябва да може да се подкара с не повече от 1-2 реда в терминала след като му се свалят кодовете. Това се постига, чрез използването на някакво билд система. В Джава имаш голям избор - maven, ant, gradle, ivy, и др. Аз лично съм фен на maven, затова ще дам пример с него, но същите неща могат да се постигнат с всяка свестна билд система.

Ето пример от едно приложение, което правих в университета:

Код: XML
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2.         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3.         <modelVersion>4.0.0</modelVersion>
  4.         <groupId>com.github.my-git-hub-name-here</groupId>
  5.         <artifactId>glViewer</artifactId>
  6.         <version>0.0.1-SNAPSHOT</version>
  7.         <name>OpenGL Viewer</name>
  8.  
  9.         <properties>
  10.                 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  11.                 <jogl-version>2.2.4</jogl-version>
  12.                 <artifact-name>${project.artifactId}</artifact-name>
  13.                 <dependencies-folder>lib</dependencies-folder>
  14.                 <distribution-folder>GLViewer</distribution-folder>
  15.                 <deploy-path>${basedir}/${distribution-folder}</deploy-path>
  16.         </properties>
  17.  
  18.         <build>
  19.                 <scriptSourceDirectory></scriptSourceDirectory>
  20.                 <finalName>${artifact-name}</finalName>
  21.                 <plugins>
  22.                         <plugin>
  23.                                 <groupId>org.apache.maven.plugins</groupId>
  24.                                 <artifactId>maven-clean-plugin</artifactId>
  25.                                 <version>2.6</version>
  26.                                 <executions>
  27.                                         <execution>
  28.                                                 <id>clean-deploy-dir</id>
  29.                                                 <phase>clean</phase>
  30.                                                 <goals>
  31.                                                         <goal>clean</goal>
  32.                                                 </goals>
  33.  
  34.                                                 <configuration>
  35.                                                         <filesets>
  36.                                                                 <fileset>
  37.                                                                         <directory>${distribution-folder}</directory>
  38.                                                                         <followSymlinks>false</followSymlinks>
  39.                                                                 </fileset>
  40.                                                         </filesets>
  41.                                                 </configuration>
  42.                                         </execution>
  43.                                 </executions>
  44.                         </plugin>
  45.  
  46.                         <plugin>
  47.                                 <artifactId>maven-compiler-plugin</artifactId>
  48.                                 <version>3.1</version>
  49.                                 <configuration>
  50.                                         <source>1.8</source>
  51.                                         <target>1.8</target>
  52.                                         <optimize>true</optimize>
  53.                                         <debug>true</debug>
  54.                                         <encoding>utf-8</encoding>
  55.                                         <useIncrementalCompilation>false</useIncrementalCompilation>
  56.                                         <fork>true</fork>
  57.                                 </configuration>
  58.                         </plugin>
  59.  
  60.                         <plugin>
  61.                                 <groupId>org.apache.maven.plugins</groupId>
  62.                                 <artifactId>maven-dependency-plugin</artifactId>
  63.                                 <version>2.8</version>
  64.                                 <executions>
  65.                                         <execution>
  66.                                                 <id>copy-dependencies</id>
  67.                                                 <phase>install</phase>
  68.                                                 <goals>
  69.                                                         <goal>copy-dependencies</goal>
  70.                                                 </goals>
  71.                                                 <configuration>
  72.                                                         <overWriteReleases>false</overWriteReleases>
  73.                                                         <overWriteSnapshots>true</overWriteSnapshots>
  74.                                                         <overWriteIfNewer>true</overWriteIfNewer>
  75.                                                         <includeScope>runtime</includeScope>
  76.                                                         <outputDirectory>${deploy-path}/${dependencies-folder}</outputDirectory>
  77.                                                 </configuration>
  78.                                         </execution>
  79.  
  80.                                         <execution>
  81.                                                 <id>copy-application</id>
  82.                                                 <phase>install</phase>
  83.                                                 <goals>
  84.                                                         <goal>copy</goal>
  85.                                                 </goals>
  86.                                                 <configuration>
  87.                                                         <artifactItems>
  88.                                                                 <artifactItem>
  89.                                                                         <groupId>${project.groupId}</groupId>
  90.                                                                         <artifactId>${project.artifactId}</artifactId>
  91.                                                                         <version>${project.version}</version>
  92.                                                                         <type>${project.packaging}</type>
  93.                                                                         <destFileName>${artifact-name}.jar</destFileName>
  94.                                                                 </artifactItem>
  95.                                                         </artifactItems>
  96.                                                         <outputDirectory>${deploy-path}</outputDirectory>
  97.                                                 </configuration>
  98.                                         </execution>
  99.                                 </executions>
  100.                         </plugin>
  101.  
  102.                         <plugin>
  103.                                 <groupId>org.apache.maven.plugins</groupId>
  104.                                 <artifactId>maven-jar-plugin</artifactId>
  105.                                 <version>2.5</version>
  106.                                 <executions>
  107.                                         <execution>
  108.                                                 <id>create-runnable-jar</id>
  109.                                                 <phase>install</phase>
  110.                                         </execution>
  111.                                 </executions>
  112.                                 <configuration>
  113.                                         <archive>
  114.                                                 <manifest>
  115.                                                         <addClasspath>true</addClasspath>
  116.                                                         <classpathPrefix>${dependencies-folder}/</classpathPrefix>
  117.                                                         <mainClass>com.github.svetlinzarev.cg.glviewer.EntryPoint</mainClass>
  118.                                                 </manifest>
  119.                                         </archive>
  120.                                 </configuration>
  121.                         </plugin>
  122.  
  123.                         <plugin>
  124.                                 <groupId>org.apache.maven.plugins</groupId>
  125.                                 <artifactId>maven-resources-plugin</artifactId>
  126.                                 <version>2.7</version>
  127.                                 <executions>
  128.                                         <execution>
  129.                                                 <id>copy-launcher-script</id>
  130.                                                 <phase>install</phase>
  131.                                                 <goals>
  132.                                                         <goal>copy-resources</goal>
  133.                                                 </goals>
  134.                                                 <configuration>
  135.                                                         <outputDirectory>${deploy-path}</outputDirectory>
  136.                                                         <resources>
  137.                                                                 <resource>
  138.                                                                         <directory>${basedir}/src/main/scripts</directory>
  139.                                                                         <filtering>true</filtering>
  140.                                                                 </resource>
  141.                                                         </resources>
  142.                                                 </configuration>
  143.                                         </execution>
  144.                                 </executions>
  145.                         </plugin>
  146.                 </plugins>
  147.         </build>
  148.  
  149.         <dependencies>
  150.                 <dependency>
  151.                         <groupId>org.jogamp.jogl</groupId>
  152.                         <artifactId>jogl-all-main</artifactId>
  153.                         <version>${jogl-version}</version>
  154.                 </dependency>
  155.  
  156.                 <dependency>
  157.                         <groupId>org.jogamp.gluegen</groupId>
  158.                         <artifactId>gluegen-rt-main</artifactId>
  159.                         <version>${jogl-version}</version>
  160.                 </dependency>
  161.  
  162.                 <dependency>
  163.                         <groupId>org.slf4j</groupId>
  164.                         <artifactId>slf4j-api</artifactId>
  165.                         <version>1.7.7</version>
  166.                 </dependency>
  167.  
  168.                 <dependency>
  169.                         <groupId>ch.qos.logback</groupId>
  170.                         <artifactId>logback-classic</artifactId>
  171.                         <version>1.1.2</version>
  172.                 </dependency>
  173.  
  174.                 <dependency>
  175.                         <groupId>junit</groupId>
  176.                         <artifactId>junit</artifactId>
  177.                         <version>4.11</version>
  178.                         <scope>test</scope>
  179.                 </dependency>
  180.  
  181.         </dependencies>
  182. </project>

Примерния pom.xml, наистина е дълъг, защото прави доста работи:
-сваля всички зависимости на моето приложение
-компилира го, като задава EntryPoint-a (класа с мейн метода)
-задава class path-a (къде да се търсят библиотеките и класовете)
-създава необходимите директории
-копира всички зависимости където им е мастото

В крайна сметка се получава:

/root folder
--/lib -> тук седят всички зависимости
--/logs -> тук се пазят логовете от изпълнението
--launcher -> скрипт за стартиранена прилогението
--glViewer.jar -> главният изпълним файл

Всеки който иска да подкара моето приложение трябва само да напише mvn clean install,
като maven ще свали от нета каквото е необходимо, ще компилира приложението, и накрая ще сложе всички елементи, където им е мястото. И няма значение дали ползваш еклипс, интели-джей или нет биинс. Всичко се свежда до един ред и просто работи  :)

ПП: в твоя случай ти е достатъчна и само <dependencies></dependencies> частта
Титла: Re: Програма за магазин
Публикувано от: Meniak в 25 Януари 2015, 19:56:57
Благодаря ви. Днес цял ден чета вашите препоръки и понеже съм доста бос още мисля да ги почна ред по ред защото ми дойдеха в повече. Така де някои работи които сте написали въобще не съм знаел че съществуват.
Титла: Re: Програма за магазин
Публикувано от: Meniak в 25 Януари 2015, 22:53:08
@kjufte
1. Това за зависимостите че трябва да кажа в readme файла че и тези библиотеки commons-io, derby вървят към проекта ОК, мислил съм че аз кат го знам и всички го знаят.
2. Какво имаш в предвид под един step by step как да го подкараме тоз нагазин?

3. Базата данни в маин пакета си има sql правиш базата и я слагаш при проекта ти защото тя работи в мобилен режим така да кажа, върви си с приложението.

4. Кода дето прави връзка с базата данни. Тези catch - ове освен че са да си принтна каква е грешката нали и спират изпълнението на кода и ако нямаш драйвер спира приложението и трещи грешка DBConection error No suitable driver found for jadbc:derby:Store
са защо я мята тая грешка няколко пъти ??? та защо връща null нали кода е в catch блока и спира изпълнението на програмата и защо на con му прилошава като извика DriverManager.getConnection.

5. Метода initialize дето е в MainScreenController не се ли слагат в него неща дето трябва да се изпълнят при отваряне на MainScreen джама и какво им е на тези медоти дет се викат в initialize?

Сега с тези ексцепшъни каде къв ексцепшън трябва да пусна не съм запознат  та ако знаеш някои туториал ще е добре щот пишеш в нета exception handling и почват едно и също ама никои не казва каква грешка да се прихваща при различни ситуации.
Титла: Re: Програма за магазин
Публикувано от: kjufte в 26 Януари 2015, 00:23:26
Таз база данни защо трябва аз да я създавам ръчно, и после да търся къде какви скриптове има, че да га изпълнявам, за да се подкара цялата работа? Не можеш ли да автоматизираш процеса? Стартираш приложението, правиш връзка и ако е нужно създаваш Store, правиш проверка дали нужните таблици ги има и ако не изпълняваш скрипта, който ги създава или нещо такова.

Аз исках да стартирам програмата ти, за да използвам готовата ти база данни и да си поиграя с JasperReports. Целта ми беше уж да стане по-бързо, а то ми отне повече от половин час докато наглася таз готова база данни и ми се отщя да си играя :)

Идеята на catch-блока е да реагираш адекватно на някакъв вид грешка. Кой метод какъв вид грешки хвърля може да провериш в документацията. Примерно в apache commons io writeStringToFile (http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html#writeStringToFile(java.io.File, java.lang.String, java.nio.charset.Charset)) може да видиш, че хвърля
Цитат
Throws:
IOException - in case of an I/O error
UnsupportedEncodingException - if the encoding is not supported by the VM

В зависимост от това каква е грешката може или само да я логнеш, или да се опиташ да я поправиш, или ако е фатална направо да спираш програмата. В твоя случай базата данни е с екзистенциално значение за програмата ти. Ако нямаш връзка с нея програмата ти нищо не може.

След като се изпълни кода в catch-а програмата продължава на следващия ред след try-catch блока. При тебе това е return-на на саответния метод.

Ето ти нещо за четене (https://www.cs.berkeley.edu/~jrs/61b/lec/15).
Титла: Re: Програма за магазин
Публикувано от: Meniak в 26 Януари 2015, 09:49:01
Това че след като се изпълни кода в catch-а, не спира програмата а  продължава на следващия ред не го знаех мислех че влезе ли там спира изпълнението на кода, не знам как съм се подвел така ама сега ми стана ясно защо con връща null.

Между другото това с JasperReports не можах да го подкарам колкото и гимнастики да правех в conf файла му и до колкото разбрах проблема бил че ползвам Java 8.
Титла: Re: Програма за магазин
Публикувано от: kjufte в 26 Януари 2015, 18:41:36
Да java 8 е проблема на   iReports. Свали си jre  или jdk 1.7.x, ако нямаш. После в папката на инсталацията на iReports отваряш etc/ireportpro.conf  и намираш един изкоментиран ред с jdkhome="....". Откоментираш го и му добавяш правилната пътека към jre/jdk 1.7.x
Титла: Re: Програма за магазин
Публикувано от: Meniak в 27 Януари 2015, 18:02:52
Направих някои промени по кода и сега мисля че е по - добре макар че още не съм на ясно с Exception - ните в смисъл не знам как може да гръмне кода за да сложа точния Exception. Сега мисля да направя в readme - то едно упътване как да подкараш програмата и се чудя още как ще стане. Това с maven дето каза @Wanderer е много добре но ще ми отнеме време да го направя.
Титла: Re: Програма за магазин
Публикувано от: Wanderer в 27 Януари 2015, 18:51:51
Само да вметна, че този който иска да ти подкара програмата не трябва ръчно да създава базата. Твоето приложение трябва да провери при стартиране дали има база и ако няма да я създаде. Друг вариант е програмата ти да чете някакъв .properties файл (става много лесно в джава) и да проверява дали има запис createDatabase=true примерно и ако има създава базата, и го сетва на false, така че при следващо стартиране да не създава. Варианти много  ;)
Титла: Re: Програма за магазин
Публикувано от: kjufte в 29 Януари 2015, 10:13:59
Хвърлих едно око на последните ти няколко comiit-а и като видях как си имплементирал създаването на базата данни и се сетих че и предния път исках да ти пиша за имената съдържанието и какво връщат функциите/методите ти.

Функциите ти трябва да имат някаква точно определена компактна задача и евентуално резултат. Трябва да са им слагаш такива имена. че като го прочетеш и веднага да знаеш за какво става въпрос и какво да очакваш. При тебе нещата са направо лудница.

Код: Java
  1.  //TODO This is not a good way to check whether the database exists
  2. public static void datadaseFolderExists() {
  3.     try {
  4.         if (destination.exists() && destination.isDirectory()) {
  5.             System.out.println("Database folder exists");
  6.         } else {
  7.             System.out.println("Database folder not exists");
  8.             createDatadase();
  9.         }
  10.     } catch (Exception e) {
  11.         System.out.println("Check database exists error" + e.getMessage());
  12.     }
  13. }

или в BackupDatabase
Код: Java
  1. public static void directoryExists() throws IOException {
  2.     if (destination.exists() && destination.isDirectory()) {
  3.         deleteDirectory(destination);
  4.         copyFolder(source, destination);
  5.     } else {
  6.         destination.mkdir();
  7.         copyFolder(source, destination);
  8.     }
  9. }

С тези имена методите ти трябва
1. да връщат boolean, а не void
2. да не правят нищо друго совен да отговарят на въпроса съществува ли с Да или Не.

directoryExists при тебе е направо швейцарско ножче - прави два вида проверки, трие, копира, създава и накрая не връща нищо.
Друг пример за кофти име е функцията searching в MainScreenController. Това ти е функцията, която ти пълни таблицата с артикули от базата данни, а не просто някаква търсачка. Освен това имената на методите ти трябва да съдържат императивен глагол. пример: search(), searchForArticle() ...
Титла: Re: Програма за магазин
Публикувано от: Meniak в 29 Януари 2015, 11:17:08
Да ще прочета малко за добрите практики с именуване на методи и класове. и @Wanderer ми каза да им обърна внимание ама сам забравил.

Но пък сега базата си се създава сами само трябва да си добавиш към проекта двата .jar файла и програмата тръгва НО начина по който проверявам дали базата съществува не ми харесва защото това е проверка дали папката съществува а не базата.

Пробвах с този код ама нещо не сработи за това сам оставил и коментар на моя метод datadaseFolderExists че това с smell и трябва го оправя.
        DatabaseMetaData dbmd = connection.getMetaData();
        ResultSet rs = dbmd.getTables(null, null, sTablename.toUpperCase(),null);
        if(rs.next())
        {
            System.out.println("Table "+rs.getString("TABLE_NAME")+"already exists !!");
        }
        else
        {
            System.out.println("Write your create table function here !!!");
        }
Титла: Re: Програма за магазин
Публикувано от: kjufte в 29 Януари 2015, 14:30:52
След като си добавил create=true (http://db.apache.org/derby/docs/10.11/ref/rrefattrib26867.html), то проверката за папката дали съществува е излишна, тъй като тя бива създадена така или иначе като извикаш за първи път
Код: Java
  1. con = DriverManager.getConnection(host, userName, password);

Този ред изглежда да е  напълно излишен.
Код: Java
  1. private static final File destination = new File("Store");

Използвай SCHEMA за проверка на базата данни. В моменат тъй като не даваш изрично име на схемата, се създава схема с името на потребителя (username), или в твоя случай MENIAK (името на схемата е винаги главни букви). Та добави една променлива dbschema примерно. Прaвиш проверка дали схемата съществува и ако не създаваш таблиците си.
Код: Java
  1. if (!executeQuery("SELECT SCHEMANAME FROM SYS.SYSSCHEMAS WHERE SCHEMANAME = '" + dbschema + "'").next()) {
  2.    createDBStructure();
  3. } else {
  4.    System.out.println("Im good to go...");          
  5. }

В createDBStructure() създай нужните таблици, като използваш дадената схема
Код: Java
  1. "CREATE TABLE " + dbschema + ".ARTICLE " ...
Или използвай SET SCHEMA (http://db.apache.org/derby/docs/10.11/ref/rrefsqlj32268.html).
Титла: Re: Програма за магазин
Публикувано от: Meniak в 30 Януари 2015, 21:05:45
Така сега както сме го направили бива, само не ми харесва че тази проверка минава всеки път а тя ти трябва само един пък ако я няма базата да я направи и до там.
А и сам се заял с тоя Jasper Report ама нещо не ми светва как да го имплементирам в кода. Jrxml файла го направих с IReport ама до там.
Титла: Re: Програма за магазин
Публикувано от: kjufte в 30 Януари 2015, 21:17:00
Аз jasper-a го подкарах и успешно генерирах един pdf. Утре ще ти постна кода, че вече съм тръгнал по кръчмите.
Титла: Re: Програма за магазин
Публикувано от: kjufte в 31 Януари 2015, 13:13:58
Този код е предимно мацаници, които са нахвърляни за бърз тест . Трябва да си го структурираш смислено. В test() функцията се генерира pdf-a и накрая вика print(), която инициира print task.

Код: Java
  1. import net.sf.jasperreports.engine.*;
  2. import net.sf.jasperreports.engine.export.*;
  3. import net.sf.jasperreports.export.SimpleExporterInput;
  4. import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput;
  5. import net.sf.jasperreports.export.SimplePdfExporterConfiguration;
  6. import net.sf.jasperreports.export.SimplePrintServiceExporterConfiguration;
  7.  
  8. import java.util.*;
  9.  
  10. import javax.print.attribute.HashPrintRequestAttributeSet;
  11. import javax.print.attribute.HashPrintServiceAttributeSet;
  12. import javax.print.attribute.PrintRequestAttributeSet;
  13. import javax.print.attribute.PrintServiceAttributeSet;
  14. import javax.print.attribute.standard.MediaSizeName;
  15.  
  16. public class JasperTest {
  17.     static String outFileName = "test.pdf";
  18.     static String fileName = "report1.jrxml";
  19.  
  20.     public static void test() {
  21.         HashMap hm = new HashMap();
  22.         try {
  23.             JasperReport report = JasperCompileManager.compileReport(fileName);
  24.             JasperPrint jasperPrint = JasperFillManager.fillReport(report, hm, DBConnection.con());
  25.             JRPdfExporter exporter = new JRPdfExporter();
  26.             exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
  27.             exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outFileName));
  28.             SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
  29.             exporter.setConfiguration(configuration);
  30.             exporter.exportReport();
  31.            
  32.             print(jasperPrint);
  33.  
  34.         } catch (JRException e) {
  35.             e.printStackTrace();
  36.             System.exit(1);
  37.         } catch (Exception e) {
  38.             e.printStackTrace();
  39.             System.exit(1);
  40.         }
  41.     }
  42.  
  43.     public static void print(JasperPrint jasperPrint) throws JRException {
  44.         PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
  45.         printRequestAttributeSet.add(MediaSizeName.ISO_A4);
  46.  
  47.         PrintServiceAttributeSet printServiceAttributeSet = new HashPrintServiceAttributeSet();
  48.  
  49.         JRPrintServiceExporter exporter = new JRPrintServiceExporter();
  50.  
  51.         exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
  52.         SimplePrintServiceExporterConfiguration configuration = new SimplePrintServiceExporterConfiguration();
  53.         configuration.setPrintRequestAttributeSet(printRequestAttributeSet);
  54.         configuration.setPrintServiceAttributeSet(printServiceAttributeSet);
  55.         configuration.setDisplayPageDialog(false);
  56.         configuration.setDisplayPrintDialog(true);
  57.         exporter.setConfiguration(configuration);
  58.         exporter.exportReport();
  59.     }
  60. }
Титла: Re: Програма за магазин
Публикувано от: Meniak в 31 Януари 2015, 17:03:27
Това чудо не знам как да по подкарам да работи, как ли не го въртях къде ли не го суках все дава грешка на 23 ред. Рекох да не бъркам пътя до файла ама как ли не го задавах и не иска. Трябва ли имам pdf четец инсталиран на компа или?
Титла: Re: Програма за магазин
Публикувано от: kjufte в 31 Януари 2015, 17:24:37
Сега на врачка ли да звъня да ми каже каква грешка ти дава?
Титла: Re: Програма за магазин
Публикувано от: Meniak в 31 Януари 2015, 18:23:41
Ами маи проблема идва от това че не съм заредил правилните .jar файлове.

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1762)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1645)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8216)
at javafx.scene.control.Button.fire(Button.java:185)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3724)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3452)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1728)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2461)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:348)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:273)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:382)
at com.sun.glass.ui.View.handleMouseEvent(View.java:553)
at com.sun.glass.ui.View.notifyMouse(View.java:925)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$141(WinApplication.java:102)
at com.sun.glass.ui.win.WinApplication$$Lambda$37/1147985808.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1757)
... 47 more
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at net.sf.jasperreports.engine.util.JRLoader.<clinit>(JRLoader.java:81)
at net.sf.jasperreports.engine.JRPropertiesUtil.loadProperties(JRPropertiesUtil.java:99)
at net.sf.jasperreports.engine.DefaultJasperReportsContext.initProperties(DefaultJasperReportsContext.java:94)
at net.sf.jasperreports.engine.DefaultJasperReportsContext.<init>(DefaultJasperReportsContext.java:71)
at net.sf.jasperreports.engine.DefaultJasperReportsContext.<clinit>(DefaultJasperReportsContext.java:59)
at net.sf.jasperreports.engine.JasperCompileManager.getDefaultInstance(JasperCompileManager.java:197)
at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:572)
at classes.Jasper.test(Jasper.java:31)
at controllers.PaymentScreenController.printPayment(PaymentScreenController.java:150)
... 57 more
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 66 more
Титла: Re: Програма за магазин
Публикувано от: Wanderer в 31 Януари 2015, 18:32:30
Трябва да добавиш http://commons.apache.org/proper/commons-logging/download_logging.cgi
Ако ползвашe maven ся нямаше да занимаваш с такива глупости.
Титла: Re: Програма за магазин
Публикувано от: kjufte в 31 Януари 2015, 18:53:05
И той няма да  е единствения. Ето тука зависимостите (https://community.jaspersoft.com/wiki/jasperreports-library-requirements).
Ако не ти се занимава да ги теглиш една по една може да си свалиш самия проект (http://community.jaspersoft.com/modal_forms/nojs/jf-user-login-register?optoutdest=http://sourceforge.net/projects/jasperreports/files/jasperreports/JasperReports%206.0.0/jasperreports-6.0.0-project.zip/download). В него като го разархивираш има една папака libs със всичките му нужни и ненужни библиотеки.
Титла: Re: Програма за магазин
Публикувано от: Meniak в 31 Януари 2015, 19:10:39
Заредил съм : jasperreports-5.6.0.jar, commons-beanutils-1.8.2.jar, commons-collections-3.2.1.jar, commons-digester-2.1.jar, commons-javaflow-20060411.jar, commons-logging-1.1.jar, groovy-all-2.0.1.jar и резултата
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1762)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1645)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8216)
at javafx.scene.control.Button.fire(Button.java:185)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3724)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3452)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1728)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2461)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:348)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:273)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:382)
at com.sun.glass.ui.View.handleMouseEvent(View.java:553)
at com.sun.glass.ui.View.notifyMouse(View.java:925)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$141(WinApplication.java:102)
at com.sun.glass.ui.win.WinApplication$$Lambda$37/626202354.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1757)
... 47 more
Caused by: java.lang.NoClassDefFoundError: com/lowagie/text/DocumentException
at classes.Jasper.test(Jasper.java:33)
at controllers.PaymentScreenController.printPayment(PaymentScreenController.java:150)
... 57 more
Caused by: java.lang.ClassNotFoundException: com.lowagie.text.DocumentException
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 59 more
Титла: Re: Програма за магазин
Публикувано от: Wanderer в 31 Януари 2015, 19:23:28
Google is your friend: http://sourceforge.net/projects/itext/
Титла: Re: Програма за магазин
Публикувано от: kjufte в 31 Януари 2015, 20:14:54
Като създаваш репорт с iReport цъкни върху иконата с чукчето да си генерираш компилиран репорт (.jasper) направо. После замени този ред в кода който зареждаш репорта и съответно името на репорта.

Код: Java
  1. String fileName = "report1.jasper"; // .jasper, а не .jrxml
  2.  
  3. ...
  4.  
  5. //  JasperReport report = JasperCompileManager.compileReport(fileName);
  6. JasperReport report = (JasperReport) JRLoader.loadObjectFromFile(fileName);          
  7.  

Процеса на компилиране в кода забавя доста генерирането (> 7 секунди при мене).
Титла: Re: Програма за магазин
Публикувано от: Meniak в 31 Януари 2015, 20:43:57
Не сака да сака и май ще го зарязвам.
Ей това ми е кода, да не би пък аз да сам не донаписал нещо

import database.DBConnection;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.export.*;
import net.sf.jasperreports.export.SimpleExporterInput;
import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput;
import net.sf.jasperreports.export.SimplePdfExporterConfiguration;
import net.sf.jasperreports.export.SimplePrintServiceExporterConfiguration;
import java.util.*;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.HashPrintServiceAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.PrintServiceAttributeSet;
import javax.print.attribute.standard.MediaSizeName;
import net.sf.jasperreports.engine.util.JRLoader;
 
public class Jasper {
    static String outFileName = "C:\\Users\\Simeon Simeonov\\Documents\\NetBeansProjects\\MyStore\\src\\classes\\test.pdf";
    static String fileName = "C:\\Users\\Simeon Simeonov\\Documents\\NetBeansProjects\\MyStore\\src\\classes\\Printer.jasper";
 
    public static void test() {
        HashMap hm = new HashMap();
        try {
            JasperReport report = (JasperReport) JRLoader.loadObjectFromFile(fileName);
            JasperPrint jasperPrint = JasperFillManager.fillReport(report, hm, DBConnection.con());
            JRPdfExporter exporter = new JRPdfExporter();
            exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
            exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outFileName));
            SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
            exporter.setConfiguration(configuration);
            exporter.exportReport();
           
            print(jasperPrint);
 
        } catch (JRException e) {
            e.printStackTrace();
            System.exit(1);
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
    }
 
    public static void print(JasperPrint jasperPrint) throws JRException {
        PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
        printRequestAttributeSet.add(MediaSizeName.ISO_A4);
 
        PrintServiceAttributeSet printServiceAttributeSet = new HashPrintServiceAttributeSet();
 
        JRPrintServiceExporter exporter = new JRPrintServiceExporter();
 
        exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
        SimplePrintServiceExporterConfiguration configuration = new SimplePrintServiceExporterConfiguration();
        configuration.setPrintRequestAttributeSet(printRequestAttributeSet);
        configuration.setPrintServiceAttributeSet(printServiceAttributeSet);
        configuration.setDisplayPageDialog(false);
        configuration.setDisplayPrintDialog(true);
        exporter.setConfiguration(configuration);
        exporter.exportReport();
    }
}

а това е грешката

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1762)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1645)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8216)
at javafx.scene.control.Button.fire(Button.java:185)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3724)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3452)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1728)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2461)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:348)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:273)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:382)
at com.sun.glass.ui.View.handleMouseEvent(View.java:553)
at com.sun.glass.ui.View.notifyMouse(View.java:925)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$141(WinApplication.java:102)
at com.sun.glass.ui.win.WinApplication$$Lambda$37/626202354.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1757)
... 47 more
Caused by: java.lang.NoClassDefFoundError: com/lowagie/text/DocumentException
at classes.Jasper.test(Jasper.java:32)
at controllers.PaymentScreenController.printPayment(PaymentScreenController.java:150)
... 57 more
Caused by: java.lang.ClassNotFoundException: com.lowagie.text.DocumentException
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 59 more
Титла: Re: Програма за магазин
Публикувано от: kjufte в 31 Януари 2015, 20:49:10
Ами точно за тази ти грешка Wanderer ти е писал кво ти липсва директно с линк.
Отделно аз ти писах как да го подкараш без ги смъкваш един по един всичките библиотеки.

Трябва да се научиш да четеш и интерпретираш warning-ите и error-ите дето ти хвърля компилатора.
Титла: Re: Програма за магазин
Публикувано от: Wanderer в 31 Януари 2015, 20:49:39
LoL. Добави ли iText от линка който ти дадох в предишния си пост ? Ако не става с него пробвай по-стара версия: http://mvnrepository.com/artifact/com.lowagie/itext

ПП: Колкото по-бързо почнеш да ползваш някаква билд система толкова по-малко ще се занимаваш с такива простотии.
Титла: Re: Програма за магазин
Публикувано от: Meniak в 31 Януари 2015, 21:13:25
Живи и здрави да сте тръгна пущината и то по добре от очакваното, сега остана мноооого дребен проблем ако нямам записи в базата данни и натисна бутона "Принтираи" ми трещи грешка че имам нулев резултат и затваря програмата та някаде маи трябва да има една проверка дали имам ко да принтирам.

java.lang.IllegalArgumentException: Null range specified
at javax.print.attribute.standard.PageRanges.<init>(PageRanges.java:211)
at net.sf.jasperreports.engine.export.JRPrintServiceExporter.exportReport(JRPrintServiceExporter.java:407)
at classes.Jasper.print(Jasper.java:68)
at classes.Jasper.test(Jasper.java:42)
at controllers.PaymentScreenController.printPayment(PaymentScreenController.java:150)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1757)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1645)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8216)
at javafx.scene.control.Button.fire(Button.java:185)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3724)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3452)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1728)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2461)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:348)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:273)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:382)
at com.sun.glass.ui.View.handleMouseEvent(View.java:553)
at com.sun.glass.ui.View.notifyMouse(View.java:925)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$141(WinApplication.java:102)
at com.sun.glass.ui.win.WinApplication$$Lambda$37/1851691492.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
Java Result: 1
Титла: Re: Програма за магазин
Публикувано от: kjufte в 31 Януари 2015, 21:18:16
Ами той бутона трябва да е активен само ако имаш кво да принтираш. Ако нямаш артикули в текуща сметка трябва да ти е деактивиран бутона.
Титла: Re: Програма за магазин
Публикувано от: Meniak в 31 Януари 2015, 21:25:38
Да значи ще направя бутона така а сега тези пътища като са така маи това ще работи само на моя комп.
static String outFileName = "C:\\Users\\Simeon Simeonov\\Documents\\NetBeansProjects\\MyStore\\src\\classes\\test.pdf";
static String fileName = "C:\\Users\\Simeon Simeonov\\Documents\\NetBeansProjects\\MyStore\\src\\classes\\Printer.jasper";
Титла: Re: Програма за магазин
Публикувано от: kjufte в 31 Януари 2015, 21:28:02
А защо са така?
Титла: Re: Програма за магазин
Публикувано от: Meniak в 31 Януари 2015, 21:35:51
Ми щот сам прос - оправих ги
static String outFileName = "src/classes/test.pdf";
static String fileName = "src/classes/Printer.jasper";
Титла: Re: Програма за магазин
Публикувано от: Meniak в 31 Януари 2015, 23:01:59
Благодаря ви за помощта и че изтърпяхте моите тъпи въпроси, добре че сте вие да ми казвате как стават нещата. Благодаря.
Титла: Re: Програма за магазин
Публикувано от: Meniak в 01 Февруари 2015, 15:56:44
Така сега имам проблем с откриването на .jasper файла в проекта ми.
На тези двете свойства какви ли пътища не задавах и ако работи в проекта в NetBeans то при компилирания .jar файл не иска.

Зададен пътя така не иска и в проекта на NetBeans да работи а това е пътя.
java.io.FileNotFoundException: \reports\ReportPayment.jasper
Трещи грешка
    private static final String fileName = "/reports/ReportPayment.jasper";
    private static final String outFileName = "/reports/Payment.pdf";
Титла: Re: Програма за магазин
Публикувано от: kjufte в 02 Февруари 2015, 19:58:50
Щото таз директория и файла най-вероятно наистина  не съществуват. В папката където ти е експортирания .jar файл създай папка с името reports и мушни вътре ReportPayment.jasper.
Титла: Re: Програма за магазин
Публикувано от: Meniak в 02 Февруари 2015, 20:13:23
А оправих проблема. аз бях направил директория reports в src директорията  и в него ми беше jaspr report-a но се оказа че трябва да ги сложа пак в тая папка ама не в src директорията а на нейното ниво демек до нея и нещата си сработиха.