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 1168 Точки

Здрасти, Катя : )
Забелязах, че има някакво несъответсвие при къдравите скоби, да не би да пишеш на ръка условните конструкции и циклите? Ако това е случаят - не знам кое 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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.