Софтуерно Инженерство
Loading...
+ Нов въпрос
KatyaMarincheva avatar KatyaMarincheva 572 Точки

[Homework] Introduction to Java August 2015

Здравейте колеги,

Богомил май излиезе прав, че със всичкото първоначално сетване на environment - това ще се окаже най-сложното домашно.

Ето от мен малко задачи:

Problem 3.Print Your Hometown

Problem 5.Print the Current Date and Time

Problem 6.Sum Two Numbers

Problem 7.Console-Based Compilation

Problem 8.* Sort Array of Strings

Problem 9.*** Generate a PDF by External Library

За 9-та задача гледах от тук, символите на боите накартите обаче не се display–ват в PDF-a, независимо от PDP-Viewer-a - пробвах Adobe Acrobat Pro, LibreOffice, OpenOffice, online PDF-viewer - боите на картите ги няма, ясво ще пробвам друга външна библиотека, с iText не стана.

Problem 10.JAR Archive + Console Execution

За jar файла, направих го с Eclipse:

File menu -> Export -> Java -> Runnable JAR file -> Next -> под Launch configuration От dropdown менюто си избирате двойка имена съответстващи на името на java файла о на проекта, в който той се намира; под Export destination -> Browse, избирате си папка за JAR файла, давате му име - аз написах DeckOfCardsPDF.jar -> под Library handling -> Extract required libraries into generated JAR -> Finish

Скрипта: отварям нов txt файл, пиша в него само java -jar DeckOfCardsPDF.jar

save-вам файла, сменям му екстеншъна на .bat, double click и той прави нов pdf - т.е. работи.

Тук има една особеност - локалната версия на java трябва да е 1.8 и cmd трябва да знае пътя до нея - аз се забавих много с това, защото имам инсталирана java 1.8, ъпдейтната навсякъде, но като напиша в cmd java -version - ми даваше все 1.7..... накрая открих, че в Computer -> Properties -> Advanced System Settings -> Environment Variables -> User variables for Katya -“ Path и System variables -> Path съм била имала много наблъскани paths едно след друго, част от тях сочещи към java 1.7, и затова комадата java -jar DeckOfCardsPDF.jar ми даваше грешка.

сложих: C:\Program Files\Java\jdk1.8.0_60\bin;C:\Program C:\Program Files\Java\jre1.8.0_60\bin; и в User и в System Path, изтрих всичко сочещо към java 1.7, и чак след като рестартирах лаптопа cmd откри новата java 1.8 и почна да ми рънва JAR file-a.

Problem 11.* Create a Windows EXE 

- това видео https://www.youtube.com/watch?v=6_gqWRkw0EY

ЕДИТ: за символите на боите на картите - Решено!

проблемът беше скапано times.ttf копие от интернет - затова

                        BaseFont baseFont = BaseFont.createFont("ARIAL.TTF", BaseFont.IDENTITY_H, true); с ARIAL.TTF копие от локалната fonts папка на компютъра работи,

BaseFont baseFont = BaseFont.createFont("c:/windows/fonts/times.ttf", BaseFont.IDENTITY_H, true); сочещо към локалната fonts папка на компютъра също работи; times.ttf не успях да го копирам от fonts папката, може би защото името на файла включва spaces?! Не знам.

Катя

Тагове:
5
Java Advanced 30/08/2015 22:04:48
Inspix avatar Inspix 51 Точки

Здравей Катя! На задачата с pdf-а не се показват знаците, заради енкодинга на фонта, трябва изрично да го отбележиш когато задаваш фонта който да използваш. Ето моето лошо и бързо решение, дано ти е от полза, поиграх си малко и с матрицата на текста за да направя огледално името на картата в долния десен ъгъл :) Поздрави!

https://github.com/Inspix/SoftUni/blob/master/Java%20Basics/01-IntroductionToJava/src/com/softuni/homeworkone/GeneratePDF.java

 

Edit: Ето и резултата.

Ето резултата.

3
27/08/2015 21:52:05
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Здравей Юлияне,

решението ти е мега-advanced! Много ми хареса!

За encoding-a обаче - това тука показва че вторият параметър подава encoding,

createFont(String name, String encoding, boolean embedded)

а в решението, което аз ползвам, encoding е подаден точно като при теб

аз: BaseFont baseFont = BaseFont.createFont("times.ttf", BaseFont.IDENTITY_H, true);

ти: font = BaseFont.createFont("c:/windows/fonts/arialbd.ttf",BaseFont.IDENTITY_H,BaseFont.EMBEDDED);

важната разлика се оказа подаването на самия фонт - ако се извиква от fonts folder-a на локалния компютър - печата unicode символи, ако се подава през папката на самия проект, дори копието да е взето от папката fonts на локалния компютър - не работи!

bottom line:

това работи:   BaseFont baseFont = BaseFont.createFont("c:/windows/fonts/times.ttf", BaseFont.IDENTITY_H, true);

това не работи:   BaseFont baseFont = BaseFont.createFont("times.ttf", BaseFont.IDENTITY_H, true);

засега нямам обяснение защо е така.....

1
28/08/2015 09:09:24
Inspix avatar Inspix 51 Точки

Здравей отново! Радвам се, че ти допада решението ми. Късно забелязах, че и ти използваш същия енкодинг, предположих, че е от това, защото аз имах проблеми по същия начин, просто уникод знаците не се показваха. Преди мъничко опитах с фонт в проекта и пак работеше. Опитах и с таблици, както е при теб, но отново си работеше.

BaseFont.createFont("fonts/times.ttf",BaseFont.IDENTITY_H,BaseFont.EMBEDDED); - работи.

font = BaseFont.createFont("times.ttf",BaseFont.IDENTITY_H,BaseFont.EMBEDDED); - с преместен фонт директно в 'src' също работи.

Използвам Eclipse Mars и iTextPdf 5.5.6, ако въобще има общо с проблема.

0
KatyaMarincheva avatar KatyaMarincheva 572 Точки

@inspix,

Eclipse Version: Mars Release (4.5.0), iTextPdf 5.5.6

- с преместен фонт директно в 'src' НЕ работи:

font = BaseFont.createFont("times.ttf",BaseFont.IDENTITY_H,BaseFont.EMBEDDED);

font = BaseFont.createFont("times.ttf",BaseFont.IDENTITY_H,true);

font = BaseFont.createFont("times.ttf",BaseFont.IDENTITY_H,false);

с никакво налучкване не работи.....

това работи

BaseFont baseFont = BaseFont.createFont("c:/windows/fonts/times.ttf", BaseFont.IDENTITY_H, true);

а times.ttf в проекта не ми е копие от локалната папка - да позвам скапано times.ttf копие от интернет?!!

Точно! Скапано times.ttf копие от интернет е бил проблема!

с ARIAL.TTF копие от локалната папка:

                        BaseFont baseFont = BaseFont.createFont("ARIAL.TTF", BaseFont.IDENTITY_H, true);

работи!!!!!

:)

2
28/08/2015 10:08:20
enevlogiev avatar enevlogiev 1169 Точки

Здрасти, Катя : )
Забелязах, че има някакво несъответсвие при къдравите скоби, да не би да пишеш на ръка условните конструкции и циклите? Ако това е случаят - не знам кое IDE използваш, но до колкото помня в Eclipse пишеш примерно if / for / while и след това LCtrl + Space го генерира. В IntelliJ мисля, че снипетите бяха itar, iter и примерно ritar, въпреки че това последното рядко се използва. След това tab + tab, ако не се лъжа : )

1
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Здрасти, Едо :)

Ползвам Eclipse, и наистина подрежда странно скобите - ще опитам това, което казваш. Благодаря :)

Катя

2
trysth avatar trysth 44 Точки

Колеги, а ако не съм направил зад. 9, в зад. 10 с кой клас да си правя архивите? Осъзнавам не особено високата интелигентност на въпроса си :)

0
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Здравей Асене,

въпросът ти е високо морален - твърдиш, че не искаш да преписваш готово решение.

Но в крайна сметка не е ли по-добре да вземеш и разучиш едно готово решение на 9-та задача? Всеки ползва И готов код.

Малко се губи смисъла на правенето на архив по друга задача, защото играта е да си вкараш И архивите с външните библиотеки в твоя архив - просто вземи "моето" решение на 9-та задача и играй с него!

1
trysth avatar trysth 44 Точки

Здрасти Катя, 

По-скоро имах предвид, че ако реша да съм basic bitch и решавам само задачите без звездички, как и с какво бих могъл да реша зад.10, която е без звездички и би трябвало да е към задължителните, но пък се отнася до незадължителна такава.

1
malkstor avatar malkstor 348 Точки

Аз ползвах някое от решенията на останалите задачи. Вярно че нямат външни библиотеки, ама какво да се прави.

2
EBojilova avatar EBojilova 330 Точки

Днес започнах да решавам това домашно но ми се появи следния проблем и от няколко часа не мога да го реша: 

Относно задачата: JAR Archive + Console Execution

Успяла съм да създада PDF файла.

После се пробвам през конзолата да компилирам с javac и ми излиза съобщение error: package com.itextpdf.text.pdf does not exist
Търсих доста къде може да ми е грешката. Въвела съм:
PATH C:\Users\Elena\Java\jre1.8.0_45\bin
CLASSPATH C:\Users\Elena\Java\jre1.8.0_45\lib
в User variables в Environment variables
рестартирала съм копмютъра и пак дава същата грешка.
Пробвах двата пата да са и в System variables, пак същото.
Използвам Windows 7 и IntelliJ.

 

0
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Ели, а на кой етап си, имаш ли вече готов jar файл, който искаш да ръннеш през cmd, или искаш да създадеш jar file?

ако jar file-a ти е готов, в конзолата навигираш дo jar file-a и пишеш:

java -jar <jar-file-name>.jar

нещо такова:


C:\Users\Katya>cd IdeaProjects

C:\Users\Katya\IdeaProjects>java -jar DeckOfCardsPDF.jar

1
29/08/2015 21:49:51
EBojilova avatar EBojilova 330 Точки

Да, успява да създаде jar файл, но аз до колкото разбра преди това трябва да съм създала .class файловете, а аз не мога да стигна до там. Създавам само .class файлове, на .java файловете, които нямат third party libraries. 

В Intellij се рънва и създава pdf., но после не мога да компилирам .java до .class

и съответно дава грешка при рънването на jar- 

Microsoft Windows [Version 6.1.7601]

Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\Elena>cd IdeaProjects

C:\Users\Elena\IdeaProjects>cd 1.IntrodcutionToJava\out\artifacts

C:\Users\Elena\IdeaProjects\1.IntrodcutionToJava\out\artifacts>java -jar 1.IntrodcutionToJava.jar

Error: A JNI error has occurred, please check your installation and try again

Exception in thread "main" java.lang.NoClassDefFoundError: com/itextpd

f/text/DocumentException

        at java.lang.Class.getDeclaredMethods0(Native Method)

        at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)

        at java.lang.Class.privateGetMethodRecursive(Class.java:3048)

        at java.lang.Class.getMethod0(Class.java:3018)

        at java.lang.Class.getMethod(Class.java:1784)

        at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)

        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)

Caused by: java.lang.ClassNotFoundException: com.itextpdf.text.DocumentException

        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:33

1)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

        ... 7 more

C:\Users\Elena\IdeaProjects\1.IntrodcutionToJava\out\artifacts>

0
29/08/2015 22:17:40
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Ако създаваш pdf имаш и клас, в папката out/ production ти е класа.

Грешката която получаваш е по-скоро защото при създаване на jar трябва да подадеш път до класа.

В IntelliJ създаването на jar го правих така:

File -> Project Structure -> Artifacts -> "+" -> JAR -> From modules with dependencies

И тук вече ти излизат две падащи менюта:

Module (тук автоматично си има избрана стойност)

Main Class (Тук browse-ваш от многоточието, и ти излиза само една опция за клас, избираш си я - вече имаш подаден клас)

Кликаш на ОК

Пак на ОК

Сега от менюто Build -> Build Artifacts -> (Action) Build

И имаш jar с клас в него.

(Що не се включиш в скайп?)

1