Eclipsen käyttö Ohjelmointi 2-kurssilla
HUOM! Videoilla voi olla eri numeron Java ja Eclipse. Käytä kaikkialla:
JDK: 22.0.2
ja Eclipse 2024-09.
Miksi Eclipse?
Vaikka Java-ohjelmia voi toki kirjoittaa millä tahansa tekstieditorilla ja kääntää komentoriviltä, tekee hyvä integroitu kehitysympäristö (IDE), kuten Eclipse, homman haltuunotosta helpommin lähestyttävämpää ja se tekee harjaantuneesta ammattimaisesta työskentelystäkin sujuvampaa ja siirtää rutiinitöitä ohjelmoijalta kehitysympäristölle.
Eclipse on yksi varsin käyttökelpoinen IDE Java-ohjelmointiin. Ammattilaistyökaluna se on toki ominaisuuksiltaan laaja, ja voi tästä syystä tuntua aluksi monimutkaiselta, mutta kun sitä opettelee käyttämään, saakin jo hyvän vaivanpalkan.
Vaihtoehtona Eclipselle voi käyttää esimerkiksi JetBrainsin IntelliJ IDEA-kehitintä.
Seuraavat ohjeet toimivat oletuksena Windowsin versioilla 7–11, uudemmilla Intel Maceilla ja M1 Maceilla ja Linuxin "perusdistroilla". Muut voivat varautua pieneen säätämiseen :-)
Tässä tekstissä "M1 Mac" tarkoittaa kaikkia Apple silicon, eli Applen omalla Arm-pohjaisella prosessorilla toimivia tietokoneita. -ji
—Vaikka noista on videot, niin muista lukea tekstiohjeita, koska videoilla sattuu aina pieniä kömmähdyksiä ja tekstistä virheet on helpompi muokata pois.
Mac videoilla on joissakin kohti oikaistu ja tehty eri järjestyksessä, jolloin joka "toimiiko" -kokeilua ei ole tarvinnut tehdä ihan joka vaiheessa. Mutta kannattaa ehkä silti mennä tekstin ehdottamasa järjestyksessä.
Windows:
Intel Mac:
Videon kohdasta 2:34 eteenpäin en pääse asennuksessa eteenpäin. Minulla ei näy jdk-17-JavaFX tiedostoa listassa, ja kun yritän painaa Add ja lisätä tietoja videon mukaan, koneelta ei löydy Java kansiota ollenkaan, pelkästään edellisessä vaiheessa tehdyn devel-kansion javafx-jmods-19 näkyy. Kuitenkin asennusten testauksissa java --list-modules komennolla kaikki mainitut tulostuivat päätteessä. Miten tästä eteenpäin? Edit: ongelma ratkesi, jostain syystä omalla Macilla Java-kansio ei löydy selailemalla kansioita, vaan kansiorakenne piti kirjoittaa suoraan tekstikenttään
VL: Nimenomaan versionumerot muuttuvat jatkuvasti. Tuo 19 on oikein k2023.
VL: Ja nyt 2024 kevät se on 21.
—Apple M1 (kurssiasetukset puuttuu, katso ne Intel Macistä, tosin Intel Mac- videot toimivat muillekin aika hyvin):
1. Asentaminen
1.1 Esivaatimukset
- Onhan Java asennettuna!?
- seuraa tätä ohjetta sitten vähintään kohtaan 6, eli perusasetuksetkin tehty.
- lähdetään ajatuksesta että asennetaan ohjelmat
c:\devel
-hakemistoon. Jos sitä ei ole, tee se.
1.2 Windows
- Lataa Eclipse.org sivuilta kohdekoneelle sopiva versio.
- Rullaa sivulla alaspäin kohtaan:
Eclipse IDE for Java Developers
. Katso että hakemasi tiedoston nimi on varmasti:eclipse-java-2024-09...
. - Toinen vaihtoehto on:
Eclipse IDE for Java EE Developers
jolloinWindowBuilderin
(tosin tätä ei nykyisin JavaFX aikaan tarvita) joutuu asentamaan erikseen (kevään jatko-osassa tätä EE versiota tarvitaan, mutta sen voi asentaa silloinkin) - Voit halutessasi tutustua Eclipsen eri versioiden vertailuun.
Asenna installerilla tai pura hakemasi
.zip
sopivaan hakemistoon, esimC:\devel\ec2409
Purkaminen käy taas helpoiten komentoriviltä (korvaae:
sillä mihin latasit):c: cd \devel mkdir ec2409 cd ec2409 tar -xf e:eclipse-java-2024-09-R-win32-x86_64.zip
Nyt pitäisi hakemistossa näkyä
c:\devel\ec2409\eclipse
kysymys: näkyy olevan 2024 versio. mistä löydän sen vanhemman jos tätä ei voi käyttää?
VL: käytetään uusinta
—1.3 Mac OS X Lion 10.7 ja uudemmat
Kun asensin Eclipsen asennussovelluksen ehdottamaan oletuskansioon (kotikansioon /Users/kayttaja/…) ei ComTest toiminut. Poistin asennuksen ja asensin uudestaan suoraan /Applications kansioon. Sitten alkoi toimimaan.
Kannattaa heti alussa valita tuo sijoituspaikka. Tosin Eclipse asentaa kotikansioon jonkin asetustiedoston, joten siinä linkitys saattaa kärsiä, jos on useita käyttäjiä.
—Alla kaksi vaihtoehtoa:
- Suora paketin purkaminen
- Asentajan käyttäminen
Omissa kokeiluissa molemmilla tuli toimiva versio, joillakin vain vaihtoehdolla 1 sai ComTestin toimimaan. Eli ehkä kannattaa yrittää sitä ensin.
- Hae paketoitu versio (valitse Eclipse IDE for Java Developers kohdasta macOS x86_64 | AArch64 oikea versio) ja sitten avaa se ja siirretään Eclipse
~/devel/ec2312
-kansioon.
- Asennus asentajan avulla:
- Hae Eclipsen asentaja (installer) Eclipsen sivuilta.
Muista Intel (x86_64) vs M-sarja (AArch64)! - Aja
eclipse-installer
. ValitseEclipse IDE for java developers
- eli tuplaklikkaa installeria ja asenna Eclipse
Applications
-kansioon (videossa tuota ei tehty heti ja siitä hirveä tappelu) - Älä Installerin aikana vaihda JDK:ta
- Jos tulee asennuksessa ongelmia, varmista, että Java on asennettu, se on versio 22.0.2 tai uudempi ja käytät käyttöjärjestelmää versioltaan 10.7 tai uudempi. Jos ongelmat eivät tällä ratkea, ota yhteys luennoitsijaan (joka ottaa yhteyden ji:hin).
- Hae Eclipsen asentaja (installer) Eclipsen sivuilta.
1.4 Linux
1.4.1 Pikasennus yhdelle käyttäjälle
- Mene lataamaan Eclipse 2024-09 R
- Eclipse IDE for Java Developers (Linux 64-bit)
- Eclipse IDE for Enterprise Java Developers (Linux 64-bit)
- Eli lataa jompikumpi asennuspaketti:
- eclipse-java-2024-09-R-linux-gtk-x86_64.tar.gz
- eclipse-jee-2024-09-R-linux-gtk-x86_64.tar.gz
- Tallenna hakemistoon:
/home/Anonymous/devel/ec2409
- Pura komennolla:
tar -zxvf eclipse-java-2024-09-R-linux-gtk-x86_64.tar.gz
tar -zxvf eclipse-jee-2024-09-R-linux-gtk-x86_64.tar.gz
- Käynnistä:
/home/Anonymous/devel/ec2409/eclipse/eclipse
Huomiona että esim snappina asennettuna distrokohtaista onnistuuko comtest pluginin asentaminen. Eli varminta asentaa tar.gz paketista.
—1.4.2 Tarkemmat ohjeet jos halutaan jotakin muuta
- tälle on oma ohjesivu
- asennusten jälkeen jatka tästä yhteisillä ohjeilla
1.5 Päivittäminen 2019-03-versioon (vanha, ohita tämä)
Mikäli Eclipsen päivittää 2019-03-versioon, tulee varoituksia kaikista .project
-tiedostojen riveistä
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
Silloin muista asentaa sitten e(fx)clipse 3.5.0!
Sitten mulla ei aina suostu ajamaan vanhoja Kerho-projekteja vaan tulee:
Editor does not contain a main type
vaikka selvästi on auki KerhoMain.java
ja siellä on pääohjelma. Tällöin pika-apu on seuraava:
Run/Run configirations...
Mene kohdan
Java Application
kohdallePaine vasemmalta ylhäätä uuden luomiskuvaketta
Täytä tyyliin:
Name: kerho7 Project: vaihe7 (tämä on yleensä oletuksena oikein) Main class: fxKerho.KerhoMain
Run
Mitenkäs päivittäminen 2019-03 versiosta 2019-12 versioon? Vanhaa projektia ei saa ajettua näistä ohjeista huolimatta, vaan virheenä tulee koko ajan classNotFoundExceptionia…
VL: entäs jos tuhoaa vanhasta ne .project ja .classpath ja sitten luo uuden projektin tuonne samaan hakemistoon niiin se tee uuden mukaiset tiedostot sinne.
Halleluja!
2. Alkuasetukset
2.1 Java 22 JRE tarkistaminen/lisääminen
Käynnistä Eclipse klikaamalla
eclipse
-hakemistossa olevaaneclipse.exe
- käynnistyminen kestää sikakauan!
(jos ei käynnisty, niin katso alempaa)
- Workspace kysymykseen esim:
- Windows:
c:\kurssit\ohj2\ws
- Mac:
/Users/Anonymous/kurssit/ohj2/ws
- Linux:
/home/Anonymous/kurssit/ohj2/ws
- Windows:
- käynnistyminen kestää sikakauan!
Valitse menusta
Window/Preferences/Java/Installed JREs
(Mac:Eclipse/Preferences/...
taiEclipse/Asetukset/...
)Add
Standard VM
Next
JRE home
kohdassa painaDirectory
ja selaa kohtaan, johon asensitJDK+JavaFX:n
, eli esimC:\devel\jdk-22-JavaFX
(Macilla/Library/Java/JavaVirtualMachines/jdk-22-JavaFX
)JRE name
kohdassa nimetäänjdk-22-JavaFX
Laitetaan vielä avustus oikeaan paikkaan: (voi olla oikein valmiiksi)
- klikkaa
JRE system libraries
alta ainoa rivi valituksi - valitse
Javadoc Location...
ja pitäisi aueta dialogi - kirjoita
https://docs.oracle.com/en/java/javase/22/docs/api/
OK
- klikkaa
Jos Windows, niin lisää kohtaan (HUOM! Tämä on uusi 2023)
Default VM arguments
seuraava jono jotta skandit tulostuvat konsoliin oikein:
-Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8
Finish
Ruksi
jdk-22-JavaFX
oletukseksi.
Apply and Close
Window/Preferences/Java/Compiler/Compiler compliance level:
kohdan valikosta22
ellei ole valmiina. (Tämä kohta oli unohtunut videolla tehdä!)
Varoitus: jdk-22-JavaFX
kohdassa pystyi valitsemaan vain yhden dokumentaation kerrallaan. Jatkossa pitää selaimella etsiä https://openjfx.io/javadoc/22/
Ei ole valittavissa kuin max 17?
VL: en ole ehtinyt tutkimaan etä auttaisiko tuohon joku Eclipse päivitys. Mutta se 17 toiminee ihan ok.. Tarkoittaa vaan ettei Java 18 uudet ominaisuudet ole käytössä, mutta en edes tiedä mitä ne olisivat. Materiaalin puolesta ei yli Java 11 ole käytössä.
—Kohdassa 9 jos lisää myös argumentin -Dstderr.encoding=UTF-8
niin näkyvät skandit myös System.err -tietovirrassa.
Eclipsen ja debuggerin käyttöohjeita löydät aikanaan pääteohjauksesta 3.
Seuraavaksi kannattaa käydä tekemässä kurssin lisäasetukset ja palata sitten jatkamaan lukemista tästä.
2.2 Jos Eclipse ei käynnisty
Jos Eclipsen käynnistymisessä tulee virhe:
Java was started but returned exit code=13
niin lue huolella virheen alkupuolen rivit. Sinulla on erittäin todennäköisesti toinenkin Java asennettuna, ja se "hyökkää" käyntiin ennen sitä uusinta. Tutki tarkoin PATH-asetuksesi, että onko ennen uusimpaan JDK:hon viittaavaa polkua aikaisemmin jokin muu polku. Voit tutkia aktiivista polkua kirjoittamalla komentoriviltä
path
Tarvittaessa vaihda polkujen järjestystä niin, että uusimman JDK:n on ensimmäisenä. Tämä voi vaatia vekslaamista henkilökohtaisen ja systeemipolun välillä.
Voit sitten kokeilla sellaistakin, että eclipse.exe
:n kanssa samassa hakemistossa on eclipse.ini
. Lisää sinne ennen -vmargs
riviä rivit:
-vm
C:\devel\jdk-22.0.2\bin\javaw
Tai vaihtoehtona on myös kokeilla hankkiutua kokonaan eroon ylimääräisistä javoista.
2.2.1 MacOS ja ”Code Signature Invalid”
Jos macOS:llä saat tuon ilmoituksen, se johtuu Eclipsen innostuksesta kirjoittaa ja muokata sovelluksen hakemistoa. Yksi tapa korjata tämä on tehdä asennus uudestaan, mutta ongelma todennäköisesti uusiutuu.
Toinen tapa korjata on asentaa Eclipse kotihakemistoon, esim. hakemistoon
/Users/Anonymous/Applications/
Taustalla on macOS:n tietoturvatarkastus, joka varmistaa, ettei ajettava ohjelmisto ole muuttunut. Voit myös vaikuttaa tähän, mutta riskialttiina toimenpiteenä se jätetään selittämättä.
3. Eclipsen ja Javan käsitteitä
Edellä tuli aika paljon eri sanoja ja käsitteitä. Seuraavassa yhteenveto niistä:
Workspace
- Eclipsen yhden työtilan alle voi tehdä useita projekteja. Yleiset asetukset tallentuvat tänne, joten jos teet uusia työtiloja, joutuu kaikkiin tekemään omat asetukset. Koko kurssin voi tehdä yhteen WorkSpaceen.project
- karkeasti yksi kokonaisuus on yksi Eclipse projekti. Esimerkiksi harjoitustyö voi olla yksi projekti, demot toinen (tai jokaiselle demolle voi tehdä oman projektin).class
- Java-ohjelmat koostuvat luokista. Siksi jokaista ohjelmaa varten on tehtävä vähintään yksi luokka. Yksi projekti voi sisältää (ja usein sisältääkin) useita luokkia.classpath
- polku mistä etsitään projektiin kuuluvia Java-tiedostoja. Voi olla levyhakemisto(ja) ja/tai.jar
tiedosto(ja)..jar
- Java ARchive, pakattu (käytännössä zip) tiedosto joka sisältää java luokkia..java
- Java-luokan lähdekielinen versio.class
- tavukoodiksi käännetty Java-luokkaJavaFX
- käyttöliittymäkirjasto, jossa käyttöliittymän ulkoasu voidaan tehdä esimerkiksiXML
-pohjaisen.fxml
-tiedoston avulla.fxml
- tiedostomuoto JavaFX ohjelman ulkoasun kuvaamiseksi. Voidaan muokata ihan tekstinä tai esimerkikiSceneBuilerillä
graafisesti.css
- Cascaded Style Sheet - tiedosto, jossa voidaan kertoa komponenttien tyylit (värit, fonttien koot, yms).SceneBuilder
- yksi mahdollinen graafinen editori.fxml
-tiedostojen muokkaamiseksisrc
- kansio jossa on lähdekoodit (.java
source)bin
- kansio jossa on käännetyt koodit (.class
binaries), joita sitten ajetaan Java-virtuaalikoneella
Esimerkiksi Hello world
ohjelman hakemistorakenne pitäisi olla:
.classpath
.project
src
hello
Hello.java
bin
hello
Hello.class
3.1 Suositeltava kurssin hakemistorakenne
Mikroluokassa voi c:\MyTemp\ohj2
tilalla käyttää myös u:\MyPrograms
(jolloin tehtäviä voi sujuvasti jatkaa toisella koneella) ja kotikoneessa esim myös c:\kurssit
.
Alla suositeltava rakenne noudattaen kerho-ohjelmassa olleita nimiä. Kaikkia automaattisesti syntyneitä tiedostoja/hakemistoja ei alla ole kerrottu. Alla olevaa ei siis tehdä kerralla, vaan se syntyy kurssin aikana.
Harjoitustyön hakemisto ht
voi olla myös hyvin sama kuin työn nimi, esim kerho
.
Alla oleva kurssin .jar
tiedostojen varasto c:\MyTemp\vesal\ohj2\jar
voisi olla myös lyhyempi c:\devel\jar
, jos sinne on kirjoitusoikeudet.
c:\devel\jar - hae tänne kurssin .jar tiedostot
Ali.jar
Graphics.jar
FXGui.jar
Music.jar
c:\kurssit\ohj2 (tai mikroluokassa MyTemp\Anonymous\ohj2\) Mac tai Linux ~/kurssit/ohj2
ws - tänne Eclipsen Workspace
ht - tänne harjoitustyö (ht projekti)
.git - hakemisto joka tuli versionhallinnan myötä
.project - tuli kun tehtiin ht projekti Eclipsellä
.classpath - tieto mitä jarreja käytetään
kuvat
avaa.png
paaikkuna.png
bin - kääntyneet Java-luokat
src - tänne harjoitustyön lähdekoodit
fxKerho - tänne käyttöliittymäkoodit
kanta - yleiskäyttöiset apuluokat
kerho - tänne käyttöliittymästä riippumattomat koodit
paate - tänne pääteohjaukset (projekti)
paate1 - hakemisto pääteohjausta 1 varten
paate2 - projekti pääteohjausta 2 varten
paate3cmd - hakemisto komentorivikääntämistä varten
jarj - paketti Java-tiedostoille
Jarj2.java
paate3 - projekti pääteohjausta 3 varten
.project
.classpath
bin - kääntyneet Java-luokat
src
jarj
Jarj2.java
Jarj3.java
demot - tänne demot (projekti)
.project
.classpath
bin - kääntyneet Java-luokat
src
demo
d1 - package demoa 1 varten
d2 - package demoa 2 varten
EtuSuku.java
Kissat.java
d3 - package demoa 3 varten
Pvm.java
Poista.java
Jos haluaa työskennellä useammassa ympäristössä, esim wimdows/linux, voi projektin buildpathin osoittaa kurssin .jareihin muokkaamalla käsin .classpath -tiedostoon suhteellisen kansiorakenteen (esim ../jar/fxgui.jar) . Tällöin eclipse löytää tiedostot aina kun projektin hakee svn:lla, vaikka järjestelmän kansiorakenne olisi eri
—4. JavaFX ja SceneBuilder
4.1 Asentaminen
- Käy tekemässä asennus näillä ohjeilla
- Palaa tänne jatkamaan.
4.2 JavaFX projektin luominen
Tulevaisuutta varten muistinvirkistykseksi:
- tästä on esimerkki SceneBuilder-harjoituksessa
- yksinkertaisemmin FXMLPackage.jar:in avulla
5. Perusasetuksia joita kannattaa tehdä
Muilla Tim-sivuilla on linkkejä miten kurssilla tarvittavia lisäosia asennetaan. Sen lisäksi kannattaa tehdä ehkä hieman muita pieniä säätöjä.
5.1 Kurssin "pluginit"
Lyhyesti lisäosien asentaminen
- tallenna alla olevista linkeistä (linkin päällä hiiren oikealla ja
Save link as...
) Eclipsen hakemistossa olevaandropins
-hakemistoon, siis esim.
Win: c:\devel\ec2409\eclipse\dropins
Mac: /Applications/Eclipse.app/Contents/Eclipse/dropins
Linux: /home/Anonymous/devel/ec2409/Eclipse/dropins
- Mene Safarissa linkin päälle ja paina kahdella sormalle
- Ota
Lataa linkitetty tiedosto
- Avaa kaksi Finder ikkunaan vierekkäin
- Toiseen lataukset
- Toiseen tuo Eclipse ja sen kohdalla kahdella sormella
Näytä pakkauksen sisältö
- Jatka
dropins
-kansioon saakka - Raahaa
Lataukset
-ikkunastadropins
-kansioon - Käynnistä uudelleen Eclipse.
- ComTest-plugin (pidempi selitys)
- FXMLPackage-plugin (pidempi selitys)
5.2 Kurssin apukirjastot
Tämän kohdan ajokokeilut voi tehdä vasta kun JavaFX-kohdat on ruksittu.
Mikroluokissa alla olevia .jar
-tiedostoja ei tarvitse hakea, vaan ne löytyy valmiina kansiosta:
C:\devel\ee410\eclipse\ohj2_library
Omassa koneessa hae hakemistoon jar
(ks. edellä suositeltu hakemistorakenne, eli esim c:\devel\jar
, älä vain käytä Microsoftin selainta...) Ole tarkkana että tallentuvat nimelle.jar
jos tulee.zip
, niin vaihda tarkennin.jar
:
Tehdään noista vielä käyttäjän kirjasto, jolloin niitä on helpompi lisätä projekteihin. HUOM! Näitä EI saa lisätä JRE:hen tai dropins
-kansioon!
Avaa Eclipsessä
Window/Preferences/Java/Build Path/User Libraries
New...
User library name:
ohj2
OK
Kun uusi kirjastosi on valittuna,
Add External JARs...
Valitse kaikki 4
jar
-hakemistoosi siirtämää.jar
-tiedostoa ja lisää ne.
Klikkaa kukin auki yksi kerrallaan, valitse sitten tuplaklikkaamalla
Javadoc Location
ja lisää kuhunkin omaJavadoc location
seuraavasti:ali.jar: https://kurssit.it.jyu.fi/TIEP111/ohj2/ali/doc/ FXGui.jar: https://kurssit.it.jyu.fi/TIEP111/ohj2/FXExamples/FXGui/javadoc graphics.jar: https://kurssit.it.jyu.fi/TIEP111/ohj1/graphicsdoc/ music.jar: https://kurssit.it.jyu.fi/TIEP111/ohj1/musicdoc
Apply and Close
Liittyen kohtaan 5.2. Mistä tiedän että toimii? Kohdassa 1 sanotaan että tee uusi JavaFx projekti. Tulkitsin tämän ensin niin että tarkoitus oli tehdä New Project –> JavaFX Project. Kun tein näin niin JarDemo ei toiminut. Kun tein “vain” normaalin java projektin aiemmilla asetuksilla niin punoitus häipyi kun lisäsin ohj2.
Toivottavasti tästä on apua muille.
—5.3 Mistä tiedän että toimii?
Jos videolta puuttui 5.1 ja 5.2, niin olethan ne silti tehnyt ensin?
Tee uusi tavallinen Java-projekti vaikka
jarkoe
:File/New/Java Project
- Project name:
jarkoe
- Ruksi
Use default JRE ...
- Ruksi pois
Use default location
- Location (joku tyhjä hakemisto, esim):
c:\kurssit\ohj2\demo01\jarkoe
- Ota ruksi pois:
Create module-info.java file
Finish
ja lisää siihen seuraavat kaksi luokkaa.
File/New/Class
Package:
jarkoe
Name:
JarDemoFinish
Kopioi sisällöksi seuraava:
"Jos tulee virhe, jossa valitetaan jotain CarSample.png puuttumisesta, varmista että ajat oikeaa tiedosotoa." Tämä virhe tulee, pahoittelen ehkä tyhmää kysymystä, mutta mikä siis on se "oikea" tiedosto mitä pitää ajaa?
VL: Tarviisi nähdä mitä teet, koska hetkeen tätä virhettä ei ole tullut.
Asia selvisi, eli Eclipse ajaa oletuksena edellisen samassa workspacessa ajetun projektin. Pitää valita erikseen oikealla napilla kyseisen projektin päältä run as. Sitten lisäksi piti valita vielä ajettavaksi jardemo ja jardemo2 luokat seuraavassa kysymysboksissa main methodille. Nyt toimii siis.
VL: Pitäisi riittää. että aktiivikseksi klikaa sen tiedoston jonka haluaa ajaa ja sitten vaikka hiiren oikealla Run As
. Windowsissa Ctrl-F11
.
VL: Vika oli siis että prokekti oli valitu ajettavaksi, ei yksittäinen Java-tiedosto.
—JarDemo toimii mutta JarDemo2 kohdalla tulee aina seuraava error eikä aja ja on punasta:
Error occurred during initialization of boot layer java.lang.module.FindException: Module javafx.controls not found
VL:Onko varmasti oikea jre?
—package jarkoe;
import fi.jyu.mit.Music.MidiPlayer;
import fi.jyu.mit.graphics.*;
import fi.jyu.mit.ohj2.Mjonot;
/** Kokeillaan Jarreja */
public class JarDemo {
/** @param args ei käytössä */
public static void main(String[] args) {
var window = new EasyWindow();
double x = 200, y = 200;
window.add(new Circle(x,y-2*15-20-10,10));
window.add(new Circle(x,y-15-20,15));
window.add(new Circle(x,y,20));
var mp = new MidiPlayer();
var notes = Mjonot.tayta("C", 3) + "E";
mp.play(notes);
}
}
JarDemo toimii, mutta JarDemo2 antaa virhettä "Error: Unable to initialize main class jarkoe.JarDemo2 Caused by: java.lang.NoClassDefFoundError: Stage". En tiedä onko ClassPath rakentunu oikein. Miten tapahtuu tarkistus, että JRE on JavaFX:lle tehty?
Problem solved. jdk-21-JavaFX oli unohtunut laittaa oletukseksi preferences/java/Installed JREs kohdassa.
—Olen lisännyt Jar-tiedostot, tehnyt globaalin kirjaston "ohj2" ja lisännyt sen Jarkokeen Dependenceihi. Silti ei IntellijIDEA tunnista importteja: "Cannot resolve symbol 'fi' ".
VL: Pääteohjauksissa (vaikka etä) voisi selvitä. Mutta tämähän on Eclipse ohje, oletko IDA-ohjeen lukenut huolella?
Olen lukenut kolmesti läpi IDEA-ohjeen, meen etäohjaukseen klo 12, niin päivitän tähän, saatiinko asia hoidettua.
[RATKAISU]
Olkaa varovaisia, kun luotte projektia IDEA:ssa. Valitaa "New Project", älkööt sitä IntelliJ:n omaa JavaFX templatee. IntellijIDEAN template käyttä "Mavenia". Haluat Build systeemiksi Intellij:n
—- Lisää tekemäsi User-library
Ohj2
projektin luokkien etsintäpolkuun,ClassPathiin
:- Hiiren oikeaa projektin päällä
Properties/Java Build Path/Libraries/Classpath
- Tarkista että projektin JRE on JavaFX:lle tehty?
Add Library
ja tuplaklikkaaUser library
- Valitse
ohj2
Finish
Apply and Close
- Aja. (Eli valitse
JarDemo.java
aktiiviseksi ja painaCtrl-F11
) File/New/Class
Package:
jarkoe
Name:
JarDemo2Finish
- Kopioi sisällöksi seuraava:
Missäköhän vika, kun saan näillä 5.3 ohjeilla tuon alemman JarDemo2 toimimaan kyllä kuten pitää, mutta JarDemo ei suostu ajamaan koska "var cannot be resolved to a type" eli noiden var:ien ymmärtäminen oikein ei taida jostain syystä onnistua?
VL: ihan kuin ois vanha Java.
Kävin asennusohjeita uudestaan läpi tarkistellen, Javasta en itsessään löytänyt mitään vikaa, mutta kun poistin Eclipsen "installed JREs" kohdassa tekemäni JRE definitionin ja tein kohdan "2.1 Java 21 JRE tarkistaminen/lisääminen" uudestaan, niin sen jälkeen alkoi toimia. Liekkö unohtanut jotain ruksia tai jotain muuta mennyt siinä vaiheessa pieleen...
—package jarkoe;
import javafx.application.Application;
import javafx.stage.Stage;
import fi.jyu.mit.fxgui.Dialogs;
/** Toinen jar kokeilu */
public class JarDemo2 extends Application {
@Override
public void start(Stage stage) {
Dialogs.showMessageDialog("Oliko äsken soiva peli?");
}
/** @param args ei käytössä */
public static void main(String[] args) {
launch(args);
}
}
- Virheitä ei saa näkyä!
- Aja.
- Jos tulee virhe, jossa valitetaan jotain CarSample.png puuttumisesta, varmista että ajat oikeaa tiedostoa. Eli klikkaa ko. Java-tiedosto aktiiviseksi ja sitten aja se. Ei projekti.
Lisätietoa näistä työkalut-sivulla.
5.4 Asetusten tuominen Eclipseen / "Vesan asetukset"
Saat Eclipsen asetukset Vesan mallin mukaiseksi seuraavasti:
talleta tiedosto VesanAsetukset.epf levylle haluamaasi paikkaan (esim.
c:\devel\ec2409\asetukset
, varo erityisesti Macissä ettei nimeä.txt
-loppuiseksi). Jos tulee.txt
, niin mene Macissa komentorville ko hakemistoon ja sanomv VesanAsetukset.epf.txt VesanAsetukset.epf
Eclipsessä
File/Import.../General/Preferences
"Next" ja valitse
From preference file
-kohtaan ladattu tiedostoOta ruksi pois kohdasta
Import all
ja valitse listalta:Java Code Style Preferences
sekäJava Compiler Preferences
Paina
Finish
tai saattaa "natista" että "käynnistä Eclipse uudestaan" ja silloin käynnistetään.Jos sinulla on jo tehty projekti, niin siivoa se: Valitse Eclipsen valikosta
Project -> Clean...
ja "OK", jotta virhelista päivittyyOta oikoluku pois käytöstä:
Window/Preferences
- kirjoita hakukenttään
spell
- valitse
Spelling
- ota ruksi pois kohdasta
Enable spell checking
Avustus aukeamaan erilliseen selaimeen, niin on helpompi lukea:
Window/Preferences/Help
Open help search
:In a browser
Open help view documents
:In a browser
Open help contents
:In an external browser
- käy tarvittaessa kohdasta
Web Browser
klikkaamassa ja säädä mieliselaimesi
Tarkista että käyttämäsi merkistö on UTF8
Window/Preferences/General/Workspace/Text file encoding
Other:
UTF8
Apply and Close
Windows 10 ja Firefox - oletusvalintana Tiedostonhallinnassa on Kansioasetukset - Näytä - Piilota tunnettujen tiedostotyyppien tunnisteet. Kun silloin yrittää tallentaa epf-muotoista linkkiä levylle se muuntuu txt-muotoon. Jos ei ota pois tuota valintaa Piilota… ei pysty tallettamaan epf-muotoista linkkiä levylle. Sen jälkeen se kyllä sujuu.
—Näiden kurssiasetusten käyttöönoton jälkeen voi käydä niin, että esim myöhemmin kohdassa User library
on jo jotakin. Silloin voit käyttää sitä valmista, mutta kunkin .jar
-tiedoston sijainti on laitettava vastaamaan sinun koneesi vastaavaa sijaintia.
Samoin voi käynnistyksen jälkeen ehdottaa ihan väärää Workspacea. Silloin kirjoita ensimmäisellä kerralla oman Workspacesi sijainti.
Jos haluat tutustua tarkemmin mitä asetuksia muutetaan, alla on ohjeet miten asetukset vaihdetaan käsin.
- Rivinumerot näkyviin:
Window/Preferences/General/Editors/Text Editors/Show line numbers
- Tab-merkit pois:
Window/Preferences/Java/Code style/Formatter/
- Paina
Edit
. Jos sinulla ei ole vielä omaa asetustiedostoa, niin anna nimi ja tallenna. - Indentation, Tab policy: Spaces only
- Samalla kannattaa ottaa kommenttien muotoilu pois, niin testit toimivat:
Comments
ja ruksi pois ruudusta:Enable Javadoc comment formatting
- Virheet päälle puuttuvista kommenteista:
Window/Preferences/Java/Compiler/Javadoc
- Ruksit kaikkiin kohtiin ja tasoiksi Error ja näkyvyydeksi protected paitsi Warning kohtaan Missing Javadoc comments
- Virheilmoitukset huomauttamaan enemmän
- Voit tehdä nämä käsin tai ottaa Vesan asetukset edellä kuvailluilla ohjeilla
Window/Preferences/Java/Compiler/Errors/Warnings
- Valitse kustakin alasvetovalikoista vähintään warning, mielellään error, sekä rastita kaikki valintaruudut seuraavin poikkeuksin:
Code style:
Unqualified access to instant field: Ignore
(muuten pitää joka paikkaan laittaa this.)
Non-externalized strings: Ignore
(muuten pitäisi tehdä GUI-jutussa liikaa käsitöitä)
Method can be static: Ignore
(sotkee jonkin verran rajapintoja jos tätä uskoisi)
Method can potentially be static: Ignore
(sama juttu)
Potential programming problems
Empty statement: Ignore
(koska ComTest generoi taulukkotesteistä tyhjiä lauseita)
Boxing and unboxing conversions: Ignore
(muuten kaikista testeistä tulee virheilmoituksia kun int => Integer)
Resource leak: Warning
(koska on paikkoja, joissa on sisäkkäisiä virtoja ja silloin ulompaa ei suljeta jos
sisempi suljetaan muualla
@SuppressWarnings("resource"), joka ei tehoa erroreihin)
Potential resource leak: Warning
(koska on paikkoja, joissa joku muu sulkee tiedsoton ja näissä korjataan
@SuppressWarnings("resource"), joka ei tehoa erroreihin)
Unused object allocation: Warning
(koska joskus halutaan tehdä new Jotakin() ja tämä tekee riittävästi)
Generic types
Redundant type arguments: Ignore
Unchecked generic type operation: Warning
(koska muuten on vaikea tehdä esim. geneerinen taulukko)
Code style
Access to non.accessible member of an enclising type : Warning
(aina ei jaksa tehdeä getteriä ja setteriä tai kannata laittaa protected)
Resource not managed via try-with-resource (1.7 or higher): Warning
(jotta tarvittaesa vo idaan käyttää @SuppressWarnings("resource") )
Name shadowing and conflicts
Local variable declaration hides another field or variable: Warning
ruksi pois kohdasta "Include constructor or setter method parameters"
(koska opetetaan laittamaan muodostajaan sama nimi kuin attribuutilla)
Unnecessary code
Value of parameter is not used: Warning
Unused import: Warning
(koska joskus noita on tuolla, ja voi silti ajaa)
Unused private member: warning
(koska kehitysvaiheessa voi joskus tarvita etukäteen esitellä)
ruksi pois kohdasta "Ignore parameters documented..."
Null analysis (vain Eclipse Kepler)
Missing '@NonNullByDefault' annotation on package: Ignore
- Clean up-asetukset kuntoon
- WindowBuilderin koodigeneraatio ei anna suoraan ylläolevilla asetuksilla virheetöntä koodia, joten:
Window/Preferences/Java/Code Style/Clean Up
- Formatterin tapaan luodaan uusi profiili: New, ja sitten haluamasi nimi ja ok
- Editistä rastit:
Missing Code
-Add Serial Version ID
jaDefault (1L)
- Tallenna muutokset
- Nyt voit koodia muokatessa
Source
valikosta valitaClean Up...
ja valita äsken tekemäsi profiilin Next
iä painamalla näet mitä muutoksiaClean Up
tekee koodiisi,Finish
tekee ne suoraan.Clean up
in pitäisi nyt generoida puuttuvat kohdat.
- Kooditemplateen päiväys
Window/Preferences/Java/Code Style/Code Templates/Comments/Types
- Edit
- lisätään
@author
-rivin perään rivi@version ${date}
- OK
- Merkistön muuttaminen demonpalautuksia ajatellen yhteensopivaksi
- Ihan vaan ettei koodi näytä demonpalautustilaisuuksissa ääkkösten suhteen tältä
Project/Properties/Resource
- Kohta "
Text file encoding
" -> Other:ISO-8859-1
(taiISO-8859-15
) (jos ei jo ole) - Kohta "
New text file delimiter
" ->Other
:Windows
- Kohta "
- WindowBuilder koodin tuottaminen niin, että tehdään nimettyjä kenttiä ja alustetaan ne saman tien:
Window/Preferences/WindowBuilder/Swing/Code generation
- valitse
Init. Field
- mahdollisesti ruksi myös
Use existing code generation...
jos haluat että jo tehdyn koodin tapa säilyy (ei välttämätön, Vesa luopui tästä) Window/Preferences/WindowBuilder/Swing/LookAndFeel
ja ruksi kohtaan Apply choosen LookAndFeel in main() method
Esimerkiksi Elain
-luokassa esitelty
/**
* Eläimen ääntely
*/
public void aantele() {
System.out.println("???");
}
näyttäisi kaiken järjen mukaan staattiselta metodilta, koska siinä ei ole yhtään tarvetta this
-viitteelle (ei käytettä attribuutteja eikä kutsuta olio ei-staattisia metodeja).
Ja tästä riemastuneena Eclipse (tai muutkin IDEt) saattavat innostua ehdottamaan metodin vaihtamista staattiseksi. Tämä muutos taas johtaisi siihen, että Kissa
-luokassa ei voida tehdä metodista uutta versiota ja menetetään polymorfismi tuon aantele-metodin suhteen.
Eclipse ei tässä tilanteessa näe sitä, että tulevissa luokissa halutaan tehdä @Override tuolle metodille.
Ihan oikea korjaus olisi muuttaa Elain
-luokka abstraktiksi, eli:
abstract public class Elain { ... /** * Eläimen ääntely */ abstract public void aantele();
(huom, ei toteutusta!)
Mutta koska tuosta abstraktista ei ole hirveästi ehditty puhua, niin toinen mahdollisuus on ottaa pois tuo virheilmoitus joko:
Varoitus pois vain ko metodista:
/**
- Eläimen ääntely */ @SuppressWarnings("static-method") public void aantele() { System.out.println("???"); }
Poistetaan varoitus ko projektista:
Project/Properties/Java Compiler/Errors/Warnings
Code style/Method can potentially be static: Ignore
Poistetaan varoitus koko Workspacesta:
Window/Preferences/Java/Compiler/Errors/Warnings
Code style/Method can potentially be static: Ignore
5.5 Omien asetusten tallentaminen ja vieminen
Edellä selitettiin miten voit tuoda valmiita asetuksia Eclipseen. Voit myös tallentaa asetuksia, jos vaikka haluat siirtää itsellesi sopivaksi hiomasi asetuksen johonkin toiseen Eclipse-asennukseen tai saat ne palautettua sieltä jos joudut tekemään uuden Workspacen:
- Ota
File/Export.../General/Preferences
- Next ja valitse kaikki sekä hyvä nimi tiedostolle
To preference file:
- pidä tiedosto tallessa
Eli tämä kohta vain jos tekee omia asetuksia?
VL: joo
—6. Muut vaihtoehdot graafiseen kehitykseen
6.1 SWT
Grafiikkaa varten voit tarvita SWT:n (tällä ei kiire). Tämä ohje tarvitaan siis jos teet sovellusta jossa SWT on käytössä. Aluksi tästä luvusta ei tarvitse välittää mitään.
Vaihtoehtoja swt.jar:in hankkimiseksi:
Eclipsen asennuksen jälkeen paketti löytyy esim:
C:\devel\ec2409\eclipse\plugins\org.eclipse.swt.win32.win32.x86_64_3.127.0.v20240903-0618.jar
Lataa erillinen versio:
- Lataa paketti: http://www.eclipse.org/swt/
- Pura paketista swt.jar jonnekin (Agoran mikroluokissa valmiina:
N:\kurssit\ohj2\eclipse\swt.jar
)
Kun tarvitse swt:tä, lisää tuo Jar projektiisi:
Project/Properties/Java Build Path/Libraries/Add External JARs...
Tai WindowsBuilderillä luo SWT-projekti.
6.2 Window Builder
- WindowBuilder (käytettiin keväällä 2015, ei paljoa käyttöä enää keväällä 2016, myöhemmin ei lainkaan)
7. Vinkkejä
- Älä tee töitä Eclipsen Workspace-hakemistossa, vaan laita projektit Workspacen ulkopuolelle. Eli kun Eclipse kysyy
Workspacen
nimeä, niin tämä toki annetaan, mutta projektia tehtäessä projektille annetaan oma hakemisto (oletuksena aina ehdottaaWorkspaceen
tekemistä. Näin vältät projektien menetykset jos joudut tuhoamaan Workspacen.- Jonnen mielipide: Parempi tapa on pitää koodit sekä Workspacessa ja versiohallinnassa (esim. git).
- Asetuksia löydät helpoiten:
Window/Preferences
(Mac:Eclipse/Preferences
)- Kirjoita tyhjään laatikkoon mitä haluat etsiä. Esim. näppäimistöjuttuja varten kirjoita
key
- Ctrl-m maksimoi ja palauttaa aktiivisen editointi-ikkunan, kuten myös tekee sen nimen tuplaklikkaaminen.
- Vaihda
Window/Preferences/General/Keys
-kohdasta itsellesi pikanäppäin mm. ohjelman ajamiseen.- Tai käytä valmiita pikanäppäimiä kuten Ctrl-F11 (OSX: Cmd-F11) vaihtonäppäimellä tai ilman. Tarkista Run-menusta oikea näppäin.
- Jos näyttää virhettä tai varoitusta, niin muista Quick Fix (Ctrl-1 viallisen rivin päällä, OSX: Cmd-1)
- Näytä TODO-lista (Tasks):
Window/Show View/Other/General/Tasks
. Löytyy helpoiten kirjoittamalla "Tasks"Show View
- ikkunan hakupalkkiin.
Tee komento, jolla voit käynnistää Eclipsen komentoriviltä. Mulla on esim.
c:\bat
polussa (PATH) ja sitten tiedostoc:\bat\ec2409.bat
:@echo off start "Eclipse" "C:\devel\ec2409\eclipse\eclipse.exe" %* -vmargs -Xmx1024M -Xms512M -XX:MaxPermSize=256m -XX:PermSize=128m -Dorg.eclipse.equinox.p2.reconciler.dropins.directory=e:/config/plg/eclipse/dropins
ja sitten Eclipse lähtee komentoriviltä käyntiin komennolla
ec2409
ja sitten dropinit tuolla mainitussa
dropins
-hakemistossa. Toki muuta polkuja tuosta tarpeen mukaan. Tuo kommentti poistetaan kun ruvetaan tekemään C++ juttuja. Linuxissa kuulemma hyvin toimivia arvoja ovat olleet:-Xms128m (oletus 40m) -Xmx512m (oletus 256m) -XX:MaxPermSize=256m (128m:kin toimi ihan kivasti) -XX:PermSize=128m (64m:kin toimi ihan kivasti)
Arvot riippuvat tietokoneeseesi asennetun työmuistin määrästä ja siitä, kuinka paljon olet valmis antamaan Eclipsen käyttöön. Yllä olevat arvot ovat joillekin isoille projekteille auttamattoman pieniä, joten jos tietokoneessasi on enemmän kuin kaksi gigaa työmuistia, kasvata noita arvoja.
- Virallinen tapa näille asetuksille on muuttaa tiedostoa
eclipse.ini
, joka löytyy siitä hakemistosta, mihin Eclipse on asennettuna, tai ympäristömuuttujanECLIPSE_HOME
osoittamasta paikasta. Tämä ympäristömuuttuja ei välttämättä ole asetettu. Lisätietoja: katso http://wiki.eclipse.org/Eclipse.ini
- Virallinen tapa näille asetuksille on muuttaa tiedostoa
Workspacen asetusten siirto toiseen workspaceen: kopioi vanhan workspacen .metadata-hakemisto hakemistoon, joka on uuden workspacen osoitteena.
7.1 Aliohjelma-kirjastot automaattisesti mukaan
Seuraavilla ohjeilla voi esim. Ali.jar ja Graphics.jar lisätä niin, että ne ovat aina mukana,
- valikosta
File/New Java project
- avautuneesta ikkunasta configure jres
- sitten valitse se installed jre jossa on ruksi ja paina edit
- sitten add external jars
- sitten valitse tiedostot ja paina finish
Näin lisätyt kirjastot tulevat kuin osaksi systeemiä ja sen jälkeen niitä ei saa enää lisätä normaalia kautta.
7.2 Eclipse ja oletushakemisto
- oletushakemistoa voi joutua säätämään jos esim lukee tai kirjoittaa ohjelmasta tiedostoja
- oletuksena oletushakemisto on se paikka mistä Eclipse käynnistettiin.
- tämän voi muuttaa jokaiselle ohjelmalle erikseen jos haluaa:
- Aja ohjelma ainakin kerran jolloin sille syntyy Run Configuration
- Run/Run configurations...
- Etsi ohjelmasi nimi
- Arguments/Working directory/Other
- kirjoita haluamasi hakemisto
7.3 Eclipse ja JUnit-testikattavuus
JUnit-testin tai testisarjan (AllTests.java) kohdalla Coverage As/JUnit Test
. Merkinnät saa pois Coverage
välilehden rukseista Remove All Sessions
.
8. Vikamahdollisuuksia
Väärä Javan versio. Kirjoita komentoriviltä
java -version
pitäisi tulla jotakin tyyliin:
java version "22.0.2" OpenJDK Runtime Environment (build 22.0.2+9-18) OpenJDK 64-Bit Server VM (build 22.0.2+9-18, mixed mode, sharing)
jos ei tule, etsi syy. Se voi olla että sinulla on muita Javoja asennettuna ja ne tulevat polusta ensin näkyville.
Eclipse sulkeutuu itsestään ennen workspacen valintaa. Kannattaa poistaa Eclipsen Configuration kansio.
Jos uusia asennuksia tehdessä valittaa features.xml -tiedostosta, niin tuhoa site.xml eclipsen hakemistosta.
Asetusten sekoaminen. Jos Eclipse ei lähde mikroluokissa käyntiin, niin poista hakemistot:
U:\config\eclipse_jee C:\Documents and Settings\USERNAME\Local Settings\Eclipse
Jos tämäkään ei auta, niin Eclipsen käynnistyessä anna Workspacelle nimi, jota ei vielä ole.
8.1 Java versio ristiin
jos saat virheilmoituksen tyyliin
java.lang.UnsupportedClassVersionError: wbKerho/KerhoGUI : Unsupported major.minor version 51.0
on kyseessä todennäköisesti se, että pyydät käännöstä Java 22:lla:
Project/Properties/Java Compiler (täällä näkyy 22)
mutta ajoympristösi (JRE=Jave Runtime Environment) on asetettu pienemmäksi:
Project/Properties/Java Build Path/Libraries/ (täällä esim. jre1.11.0_1)
korjaus:
- joko muuta Java Compiler 11 tai
- muuta JRE 22-versioon
voit muuttaa ajoympäristön yliopiston koneella seuraavasti
Project -> properties -> Java Build Path -> Libraries Add Library -> JRE System library -> Installed JRE's Add -> Standard VM -> JRE home -> C:\Program Files (x86)\Java\jdk1.9...(jotakin) ja OK
8.2 macOS: Eclipse ei voi avata (Eclipse can't be opened)
Jossain macOS-koneissa voi joskus tulla Eclipsen asennuksen tai käytön jälkeen "Eclipse ei voi avata".
Vika lienee macOS:n varmennejärjestelmässä (tai Eclpisen tavassa allekirjoittaa sovelluksen), ja korjauksena tulee ajaa
sudo codesign --force --deep --sign - /Applications/Eclipse.app
Syötä oman käyttäjätunnuksen salasana. Kun komento valmistuu, kokeile avata Eclipse uudelleen.
8.3 Eclipse Workspace ei lähde käyntiin
tuhoa workspacen hakemistosta:
c:\kurssit\ohj2\ws\ohj2024\.metadata\.plugins\org.eclipse.core.resources
tiedostot
*.snap
jos ei auta, katso lisäohjeita
9. Ajettavan Jar-tiedoston tuottaminen
9.1 Tekeminen 1. kerran
Eclipsestä voi tehdä valmiiksi ajettavan .jar -tiedoston seuraavasti:
File/Export.../Java/Runnable JAR file
(eri kuinJAR file
)Next
Valitse
Launch Configuration
kohtaan sen sovelluksen pääohjelma, josta haluat tehdä ajettavan .jar-tiedostonExport destination
kohtaan laita se paikka, johon haluat .jar:in tulevan ja sen nimi (helpointa ehkä Browsen kautta). Mieluusti vaikka projektin hakemisto (ei missään nimessä src tai sen alla oleva hakemisto)Anna pallukan olla kohdassa
Extract required libraries into generated JAR
Kannattaa tallettaa myös Ant-skripti, jotta on helppo tuottaa uusi versio
Ant-tiedoston paikaksi kannattaa laittaa projektin hakemisto ja nimeksi
build.xml
(paikaksi ei missään nimessäsrc
tai sen alla oleva hakemisto)- Muista lisätä se myös versionhallintaan.
Finish
Katso syntynyt
build.xml
ja jos siellä on rivejä tyyliin:<zipfileset excludes="META-INF/*.SF" src="C:/devel/ee2012/eclipse/plugins/org.junit.jupiter.api_5.7.0.v20201026-1537.jar"/> <zipfileset excludes="META-INF/*.SF" src="C:/devel/ee2012/eclipse/plugins/org.junit.jupiter.engine_5.7.0.v20201026-1537.jar"/>
niin poista ne kaikki. Sitten aja uudelleen hiiren oikealla
build.xml
ja valitseRun as/Ant build
HUOM - OBS! Älä poista rivejä tyyliin:
<zipfileset excludes="META-INF/*.SF" src="C:/devel/jar/fxgui.jar"/>
Nämä ovat kurssin oman kirjaston riippuvuuksia, ilman näitä ei .jar toimi.
tarkista että syntynyt
.jar
ei ole yli 200KB. Jos on, onbuild.xml
:ssä liikaa tavaraa.tämä syntynyt
.jar
tiedosto pitää pakottaa erikseen lisääntymään Gitiin, koska muuten.jar
on kielletty laittamasta sinne. Esimerkiksi (hakemistossa johon teit.jar
):git add -f kerho.jar git commit -m "lisatty jar" git push
“Exported with compile warnings:.. Main.java -”- ..Controller.java ja -“- ..Main.Java”
Koituuko tästä ongelmia?
VL: Jos se Jar toimii, niin ei.
—“This operation repacks referenced libraries” -varoitus tulee kun yrittää painaa “Finish”. Vaatiiko toimenpiteitä vai voiko ohittaa?
VL: Joo, anna mennä vaan. Matta katso ettei tuone build.xml:ää tule liikaa tavaraa.
—En saa jar-tiedostoa alle 100kb:ksi, ja build.xml:ssä jolla sen loin on vain Ali, Graphics ja fxgui
VL: No on se näköjään mullakin reilu 150 kB.
—Onko ohjeita miten Jar-tiedoston saa luotua IntelliJ Idea sovelluksella? Siellä ei anna muita export vaihtoehtoja kuin "selection to HTML" tai "Project to Eclipse". Onko jokin olennainen pala jäänyt asentamatta? Kyseessä M1 Mac jos vaikuttaa asiaan.
VL: Kopsin tekoälystä tuonne: https://tim.jyu.fi/view/kurssit/tie/ohj2/tyokalut/intellij#luojar Ne voisi kokeilla ja korjata ja tarkentaa.
Kokeilin ja toimii hyvin. Kävin hieman muokkaamassa ohjeita ja lisäsin selvennyksiä
—9.2 .jar-tiedoston ajaminen
Nyt sinulle on syntynyt valmis ajettava .jar jonka voit ajaa
kirjoittamalla komentoriviltä
java -jar NIMI.jar
mahdollisesti jopa
NIMI.jar
klikkaamalla tiedostonhallinnasta .jar -tiedostoa.
Tämä .jar kannattaa harjoitustyössä laittaa myös versionhallintaan, jotta ohjaaja voi helposti sitten kokeilla ohjelmaa.
Kun teen uuden .jar-tiedoston ja yritän ajaa tiedostonhallinnasta, niin heittää JNI errorin. Jos ajan komentokehotteelta niin ohjelma tulee ajettua, paitsi jos se on graafinen - silloin se heittää java.lang.NoClassDefFoundErrorin
—Sama ongelma JNI errorin kanssa. Komentoriviltä tosin toimii kunhan vain syöttää moduulien sijainnin kuten tuossa alla.
VL: Ei niitä voikkaan ajaa muuta kuin komentoriviltä TAI tekemällä alla mainittu jw
-komento ja assosioimalla se .jar
-tiedostoihin. Silloin sen voisi ajaa klikkaamalla. Mutta tyytykää siihen, että ajatte komentoriviltä kuten pääteohjaus 1 vai mikä se oli.
Koneella näkyy tämän kohdan jälkeen build.xml ja kerho.jar mutta gitistä ei löydy kuin build.xml. Ja kun bashilla yritän ajaa sitä, se heittää kaikenlaista ja seassa jotain "caused by: ClassNotFoundException: fi.jyu.mit.fxgui.comboboxchooser... ja jää jumiin.
VL: OK, se jar ei mene automaattsiesti Gitin, joten pakota se menemään noilla 9.1 lopussa olevilla ohjeilla (lisäsin ne juuri)
—golfkerho.jar komennolla komentorivillä antaa Java Virtual Machine Launcher virheilmoituksen: "Error: A JNI error has occurred, please check your installation and try again". Mitä pitäisi tehdä, että korjaantuu? Edlleen GitBashin puolella jää jumiin, jos yrittää javaw -jar golfkerho.jar komentoa ajaa. Gitiin tosin sain sen .jar-tiedoston, että jotain parannusta.
VL: ajas javaw
sijaan java
, niin näet virheilmoitukset. Tuo jni pitää varmaan katsoa ohjauksissa...
Jos on tehty kurssin asetukset, niin myös JavaFX-ohjelmia voidaan ajaa tyyliin
java -jar kerho.jar
Windowsissa
javaw -jar kerho.jar
tekee sen, ettei jää odottamaan graafisen ohjelman sulkeutumista, mutta mahdolliset Javan virheviestit jää näkemättä. Eli kannattaa kokeilla molempia.
Mikäli ohjelmassa käytetään JavaFX
:ä eikä ole kurssin omaa jdk-22-JavaFX tehty, pitää Java 11:sta asti kertoa mistä moduulit löytyvät. Eli silloin ajaminen Windowsissa esimerkiksi:
javaw --module-path c:\devel\javafx\lib --add-modules javafx.controls,javafx.fxml -jar kerho.jar
Moduulilista (--add-modules
) voi joutua olemaan pidempikin riippuen siitä, mitä moduuleja on käytetty. Täydellinen lista näkyy siellä missä tehtiin JRE
JavaFX:ää varten.
Jos javaw-komento ei toimi voi kokeilla alla olevaa komentoa, jossa ilmoitetaan alussa sijainti
"C:\Program Files\Java\jdk-15.0.1\bin\javaw.exe" --module-path c:\devel\javafx\lib --add-modules javafx.controls,javafx.fxml -jar <TIEDOSTON_NIMI>
Koska tuo ajamiskomento on varsin pitkä, kannattaa ehkä Windowissa tehdä polussa (path) olevaan hakemistoon (esim c:\bin
) tiedosto jw.cmd
:
@echo off
javaw --module-path c:\devel\javafx\lib --add-modules javafx.controls,javafx.fxml -jar %*
Mistähän johtuu että tuo jw ei toimi tuolta c: bin tai muustakaan c polussa olevasta kansiosta, sanoo vaan että: ‘jw’ is not recognized as an internal or external command, operable program or batch file. mutta jos laitan sen samaan kansioon tuon jar tiedoston kanssa niin sitten ohjelma kyllä aukeaa jw “tiedostonnimi”.jar komennolla?
VL: Veikkaisin että c:\bin
ei ole polussa. Tai sitten olet lisännyt sen polkuun mutta et ole käynnistänyt sit komentoriviä uudelleen.
Mikroluokissa tämä jw.cmd
on valmiina, eli siellä aja graafiset .jar
-tiedostot:
jw kerho.jar
Linux tai Mac (jw.sh):
java -jar --module-path ~/devel/javafx/lib/ --add-modules javafx.controls,javafx.fxml kerho.jar
tai tekemällä vaikkapa polussa olevaan ~/bin -hakemistoon komento
jw
:#!/bin/sh java -jar --module-path ~/devel/javafx/lib/ --add-modules javafx.controls,javafx.fxml $1
jonka jälkeen
.jar
-tiedostojen ajaminen onnistuu:jw kerho.jar
Huomaa että jos JavaFX
asennus on hakemistossa, jossa on välilyöntejä nimessä, niin optioiden tiedostonimet pitää antaa lainausmerkeissä tyyliin:
javaw --module-path "c:\Program Files\javafx\lib" ...
Jos .jar
käynnistetään ja mitään ei tule näyttöön, niin silloin kannattaa kokeilla niin, että javaw
sijaan kirjoittaa java
, jolloin käynnistyy ylimäärinen komentoikkunan jossa näkyy mahdolliset virheilmoitukset, jotka javaw
jättää näyttämättä.
9.3 Uuden .jar tiedoston tekeminen
Uuden .jar-tiedoston tekeminen kun lähdekoodi on muuttunut:
- valitse hiiren oikealla
build.xml
Run as/Ant build
- jos projektin kirjastotiedot yms muuttuvat kovin paljon, voi olla helpointa tehdä
.jar
jabuild.xml
uudelleen kohdan 9.1 ohjeilla - toki voi muokata vastaavasti build.xml tiedostoa kunhan tutustuu sen syntaksiin
9.4 Ajettavan .jar tiedoston tekeminen komentoriviltä
Pakataan "käsipelissä" kurssin malliohjelma Jar-tiedostoksi:
lue: http://java.sun.com/docs/books/tutorial/deployment/jar/index.html
Ensin tehdään tiedosto jossa kerrotaan mikä on pääluokka ja mistä löytyy kirjastot. Olkoon tiedosto esimerkiksi manifest.mf:
Main-Class: kerho.Naytto Class-Path: Ali.jar
Sitten luodaan
.jar
-tiedosto komennolla:jar cvfm kerho.jar manifest.mf kerho\*.class
Ohjelmaa ajavan pitää kopioida itselleen nyt samaan hakemistoon
kerho.jar
jaAli.jar
. Samoin samaan tiedostoon pitää kopioida mahdollisesti tarvittavat data-tiedostot. Ohjelma ajetaan komennolla:java -jar kerho.jar
Tuon komennon voi kirjoittaa vaikka tiedostoon
kerho.cmd
(Windows) ja sitten ohjelman voi ajaa tuota tiedostoa klikkaamalla. Tai sitten pääte.jar
voidaan assosioida tekemään tuo java-ajo.
9.5 Mallikerhon kääntäminen ja ajaminen komentoriviltä
Haetaan kerho versionhallinnasta puhtaaseen hakemistoon:
git clone https://gitlab.jyu.fi/tie/ohj2/kerhoja/kerho20/kerho8.git .
Ajetaan java-kääntäjä (
javac
) (jos\devel
ei ole samalla levyllä, lisää eteen tarvittaessac:
ja Mac/Linux muokkaa polkujen nimiä vastaavasti)javac -d bin -cp \devel\jar\Ali.jar;\devel\jar\fxgui.jar --module-path \devel\javafx\lib --add-modules javafx.fxml,javafx.controls,javafx.web src\fxKerho\*.java src\kanta\*.java src\kerho\*.java
Siirretään käyttöliittymän tiedostot hakemistosta
src
hakemistoonbin
copy src\fxKerho\*.fxml bin\fxKerho copy src\fxKerho\*.css bin\fxKerho
Kokeillaan, että toimii
java -cp bin;\devel\jar\Ali.jar;\devel\jar\fxgui.jar --module-path \devel\javafx\lib --add-modules javafx.fxml,javafx.controls,javafx.web fxKerho.KerhoMain
Vaihdetaan hakemistoon bin ja kirjoitetaan tiedosto
manifest.mf
cd bin echo Main-Class: fxKerho.KerhoMain > manifest.mf echo Class-Path: . >> manifest.mf
Puretaan tarvittavat kirjastot
Ali.jar
jafxgui.jar
hakemistoonbin
jar xvf \devel\jar\Ali.jar jar xvf \devel\jar\fxgui.jar
Luodaan ajettava jar-tiedosto
jar -cfm ..\kerho.jar manifest.mf .
Kokeillaan, että toimii
cd .. java --module-path \devel\javafx\lib --add-modules javafx.controls,javafx.fxml,javafx.web -jar kerho.jar
tai (jw.cmd)
jw kerho.jar
9.6 Windowsin asettaminen ajamaan .jar tiedostoja
Periaattessa .jar -tiedosto ajetaan esim komennolla:
java -jar kerho.jar
Tämän komennon voi haudata vaikkapa kerho.cmd
nimiseksi tiedostoksi, jolloin sitä klikkaamalla lähtee ohjelma käyntiin.
Toinen mahdollisuus on assosioida .jar
-pääte antamalla järjestelmän valvojana avatulta komentoriviltä komennot:
assoc .jar=jar-file
ftype jar-file=java -jar %1
tai (Java 8)
assoc .jar=jar-file
ftype jar-file=javaw -jar %1
tai (Java 22)
assoc .jar=jar-file
ftype jar-file=javaw --module-path c:\devel\javafx\lib --add-modules javafx.controls,javafx.fxml -jar %1
mikäli halutaan ettei aukea ylimääräistä komentoikkunaa kun ohjelman ajetaan. Tämä toimii vain graafisille Java-ohjelmille, muut tarvitsevat tuon komentoikkunan.
10. Javadoc dokumentaatio
10.1 Javadoc dokumentaatio Eclipsellä
Muodosta dokumentaatio projektihakemiston doc
kansioon.
Project/Generate Javadoc...
ruksi projektisi nimi mutta käy sen alta poistamassa ruksi kaikista test-hakemistoista
Next
ruksi kaikki jarrit
Next
kohtaan Extra Javadoc options laita:
-tag example:a:"Esimerkki" -encoding utf8 -docencoding utf8 -charset utf8 -cp .;c:\devel\jar\Ali.jar;c:\devel\jar\fxgui.jar --module-path c:\devel\javafx\lib --add-modules javafx.fxml,javafx.controls,javafx.web
Finish
Yhtään omaa jar ei ole valmiina ja mun rekisteri sanoo että ei ole konfiguraatiota…
VL: näistä ei kannata välittää mitään ennenkuin ollaan niin pitkällä että on kunnolla koodia. Ja käytännössä tämä tehdään TIMissä cloonaamalla hakemisto sinne.
10.2 Javadoc dokumentaatio komentoriviltä
Hae dokumentoitava mallikerho versionhallinnasta
git clone https://gitlab.jyu.fi/tie/ohj2/kerhoja/kerho20/kerho8.git .
Luo
Javadoc
dokumentaatio kommenteista hakemistoondoc
javadoc -d doc -tag example:a:"Esimerkki" -encoding utf8 -docencoding utf8 -charset utf8 -cp .;c:\devel\jar\Ali.jar;c:\devel\jar\fxgui.jar --module-path c:\devel\javafx\lib --add-modules javafx.fxml,javafx.controls,javafx.web .\src\kanta\*.java .\src\kerho\*.java .\src\fxKerho\*.java 2> error.log
Lue tiedostoon
error.log
ohjatut virheilmoituksettype error.log
11. Muita temppuja
11.1 Oman kirjaston tekeminen
- oman User libraryn tekeminen
11.2 Interaktiivinen Java
- Tämä ei tue toistaiseksi uudempia Javoja, joten kannattaneen unohtaa, debuggerilla saa tehtyä pitkälle samoja asioita.
- DrJava:n avulla voi Javaa käyttää interaktiivisesti
- valitse tuolla Eclipse Plugin, lataa .zip ja pura sieltä .jar Eclipsen dropins hakemistoon
Window/Open perspective/Other/DrJava
- kirjoita Interaction ikkunaan java-lauseita. Tulostusta ei tarvitse, koska muuttujan nimen kirjoittaminen tulostaa sen sisällön
DrJava näyttäisi ainakin minulla jumittavan Eclipsen.
—11.3 Turhien varoitusten väliaikainen poistaminen
- lisää esim:
@SuppressWarnings("unchecked")
- lista Eclipsen varoituksista
- lista IDEAn varoituksista
11.4 Pikanäppäimet
Eclipsessä Alt
+ Shift
+ S
, kun Java-luokka valittuna.
Override/Implement Methods...
jatoString()
Generate Constructor using Fields...
Generate Getters and Setters...
Eclipsessä Alt
+ Shift
+ W
, kun hakemisto valittuna.
System Explorer
Eclipsessä F3
aliohjelmakutsun kohdalla.
Open Declaration
12. Eclipse ja tavukoodin tutkiminen
Joskus on kiva katsoa miltä näyttää käännetty tavukoodi:
- joskus voi riittää että Eclipsellä vain avaa .class -tiedoston ja katsoo sitä -toisaalta joskus voi olla kiva että on parempi integrointi koodiin, yksi toimiva plugin on esim: http://andrei.gmxhome.de/bytecode/index.html
13. Vanhemmat käyttikset ja versiot
13.1 Eclipse ja Vista 64 ja Windows 7 64 bit
- Enää ei pitäisi olla mitään erityisiä ongelmia 64 bittisyydenkään kanssa.
- Vanhoista ongelmista ks: https://korppi.jyu.fi/kotka/servlet/list-archive/ohj08k/0144.html
13.2 OS X 10.6 ja vanhemmat
Java 1.6:lla Eclipse ja WindowBuilder toimivat Macissa hyvin, mutta 1.7 versiolla tulee jo Eclipsenkin kanssa ongelmia. JDK7:sta on Macille julkaistu vasta Developer Preview. OpenJDK:sta on myös oma aktiivisemmin kehitettävä porttaus Macille.
Asennusvaiheet
- Hae ja asenna uusin Oraclen JDK7
- Avaa Java Preferences (esim.
/Applications/Utilities/Java Preferences.app
) - Aktivoi ja siirrä molemmat 1.7 versiot listan ylimmäisiksi
- 1.6 ei tarvitse välttämättä poistaa
Eclipse (Alkuperäinen ohje tarkoitettu OpenJDK:lle, mutta toimii Orclen JDK:n kanssa)
- Hae ja pura Eclipse haluttuun kansioon
- Tee tarvittavat muutokset (käynnistysskripti ja eclipse.ini) seuraavan ohjeen mukaan: http://code.google.com/p/openjdk-osx-build/wiki/EclipseWithOpenJDK
- Jos käyttää Oraclen JDK:ta pitää huomata muuttaa kansioiden polut oikeiksi (esim. 1.7.0.jdk -> JDK 1.7.0 Developer Preview.jdk)
- Eclipsen asetuksista Preferences->Java->Installed Jars -kohtaan pitää käydä lisäämässä asennetun javan polku.
- .jdk -paketin sisältä ei välttämättä pysty selaamaan, joten Home -kohtaan joudut käsin laittamaan asennuspolun (esim.
/Library/Java/JavaVirtualMachines/JDK 1.7.0 Developer Preview.jdk/Contents/Home/
- .jdk -paketin sisältä ei välttämättä pysty selaamaan, joten Home -kohtaan joudut käsin laittamaan asennuspolun (esim.
Muista lisätä (tarvittaessa) myös asennettu java projektiisi/workspaceen.
Joissakin tapauksissa joutuu tekemään symlinkin
/Library/Java/JavaVirtualMachines/JDK 1.7.0 Developer Preview.jdk/Contents/ -> /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK`
Myös Info.plistiä (löytyy Eclipsen asennuskansiosta Eclipse.app -paketin sisältä Contents -kansiosta) saattaa joutua muokkaamaan seuraavanlaiseksi:
...
<key>Eclipse</key>
<array>
<string>-vm</string>
<string>/Library/Java/JavaVirtualMachines/JDK 1.7.0 Developer Preview.jdk/Contents/Home/</string>
<string>-keyring</string>
...
Eli lisäämään Eclipse kohtaan -vm ja Javan polun.
"Download painikkeen" alla on linkki "Download Packages". Klikkaa sitä ja pääset sivulle, josta tuon "Eclipse IDE for Java Developers" -version saa ladattua zippinö. Pura zip ja siirrä Eclipse.app Ohjelmat (Applications) hakemistoon. (En tykkää installereista, joten itse teen Ecluosen asennuksen aina näin.) -ji
—14. Mikäli WindowBuilder ei löydy Eclipsestä mikroluokissa
Jos Eclipsestä käynnistää vanhan 3.6-version (Helios), se voi sotkea asetuksia sen verran, että WindowBuilder-välilehti ei suoraan Eclipsestä enää löydy.
Tämän saa korjattua seuraavasti:
- Mene hakemistoon
U:\config
. - Poista kansio
eclipse_jee
.
Huomioi, että tämä voi poistaa joitain käyttäjäkohtaisia asetuksia. Tämän jälkeen WindowBuilder pitäisi taas toimia Eclipsessä. Helios-version käyttämistä tulisi välttää ja käyttää uudempaa Kepler-versiota.
15. Eclipse hidas käynnistymään
En ole kokeillut, mutta joku voisi kokeilla noita ohjeita:
Kumpikaan näistä linkeistä ei taida enää ohjautua toivottuun paikkaan.
—Hitaus johtuu vähäisestä määrästä varattua muistia Eclipseä käynnistettäessä. Asiaa on selitettty kohdassa "Vinkkejä". Ohjeet muistimäärän vaihtamiseen löytyvät sivustolta http://wiki.eclipse.org/Eclipse.ini
—These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.