Netbeans / projektit

Mika0800

Lopullisena tarkoituksenani on rakentaa Java -sovellus kännykkään, eli kyse siis J2ME -sovelluksesta.

Olio-ohjelmointi on minulle toki Delphistä tuttua, mutta java kielenä on itselleni uusi tuttavuus.

Siksi uuteen kieleen ja ympäristöön tutustuttaessa, ja koska moni asia selviää parhaiten testaamalla, pidän hyvänä ideana rakentaa rinnallle testiprojekti, joka taas on Swingiä käyttävä J2SE -sovellus.

Entä, jos haluan rakentaa omia luokkakirjastoja siten, että ne ovat molempien projektien käytettävissä?

Kun J2ME:ssä ja J2SE:ssä ovat samat/vastaavat toiminnallisuudet hieman eri paikoissa, niin onnistuuko tuo Javassa mitenkään?

Siis hakusessa olisi jotain tämänatapaista (Onko Javassa yleensä IFDEF:iä, ja jos on, mikä on oikea syntaksi):

{$IFDEF J2SE}
import java.net.*
{$ENDIF}

{$IFDEF J2ME}
import javax.microedition.midlet.*
{$ENDIF}

Eli, miten javassa voisi tehdä sellaisen luokkakirjaston, jossa on ehdollinen kääntäminen niin, että se itse käyttää eri luokkakirjastoja ja mahdollisesti sama oman luokan metodi voi olla toteutettu hieman eri tavalla riippuen, käännetäänkö lähdekooditiedosto J2ME vai J2SE -ympäristöön ?

4

460

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • ANT
      • Mika0800

        Tuolla sivulla on muutamia sekavia asioita:

        "
        The // at the beginning of the tag ensures that this is still valid Java source code.
        To exclude code:

        /* //[endef]
        public byte[] getBytes(String parameterName) {
        ...
        }
        //[ifdef] */

        2. To swap the used code for version 2 the start and end tag just have to be set to /* respectively */.
        "

        Ensinnäkin:

        "endef" ? - onko tuo pelkkä kirjoitusvirhe (enddef?) vai onko tuo tarkoitukselle vain 1 d:llä ?

        2. Miksi ensin "endef" ja vasta sitten "ifdef" ?

        Ja heti ensimmäisenä:

        "
        //[ifdef]
        import java.sql.ParameterMetaData;
        //[enddef]
        "


        hmmm... miksi:

        //[ifdef]


        miksei:

        //[ifdef J2SE]

        tai

        //[ifdef J2ME]

        siis omassa tapauksessani. Toki tuolla voisi olla joku muu määre, mutta ifdef ilman *mitään* määrettä???

        Entäpä sitten tämä huomautus:

        "Attention: the source code is copied into two different root directory one for version 1 and the other for version 2. Because Ant tries to avoid copies if the file does not have changed this can lead to having the wrong version of code in your target directory."

        Missä tilanteissa siis on vaara, että Ant onnistuu saamaan aikaiseksi käännettäväksi kokonaan väärän version ja miten tuolta vaaralta vältytään ?

        Muutenkin, tuo Antin konfigurointi vaikuttaa varsin sekavalta.

        Miksei kieleen ole lisätty ifdef-else-endif -toiminnallisuutta. Tällä muuten ei välttämättä ole mitään tekemistä C/C -tyylisen esiprosessoinnin (preprocessor) kanssa, sillä esim. Delphissä ON {$IFDEF JokinSymboli}, {$ELSE} ja {$ENDIF}, mutta Delphissä silti EI ole esiprosessoria.

        Entäpä tuo "final boolean" -kikka?

        Siitä voi joissain olosuhteissa ollahyötyäkin, mutta:

        Javan tiukka "vain olioita" -politiikka aiheuttaa tässä harmia. Eli tuollaisen "final boolean" -muuttujan (eli itseasiassa vakion) on oltava olion jäsen.

        Toiseksi, sitäei voi käyttää ehdolliseen "import" -lauseeseen.

        Ja kolmanneksi, tätäkään ei voi tehdä:

        public class TCriticalSection {

        public final static boolean EiKoskaan = false;

        ... ja myöhemmin koodissa ...

        if (EiKoskaan) {
        //
        JokinOlematonRutiini();
        //
        }


        ...

        Tuo nimittäin aiheuttaa kääntäjäviorheilmoituksen.

        Eli asia ei olekaan niin yksinkertainen, että kun kääntäjä huomaa, että "EiKoskaan" on pysyvästi false, niin JokinOlematonRutiini() ei koskaan kutsuta, ja siksi ei haittaa, ettei sitä ole olemassa.

        Koska käytän Java -kehitysalustana Linux Netbeans, niin paras ratkaisu olisi ehkä luova yhdistelmä "include files" linuxin "soft links".

        mutta löytyykös Javasta sitten myöskään noita include filejä ?


      • ANT
        Mika0800 kirjoitti:

        Tuolla sivulla on muutamia sekavia asioita:

        "
        The // at the beginning of the tag ensures that this is still valid Java source code.
        To exclude code:

        /* //[endef]
        public byte[] getBytes(String parameterName) {
        ...
        }
        //[ifdef] */

        2. To swap the used code for version 2 the start and end tag just have to be set to /* respectively */.
        "

        Ensinnäkin:

        "endef" ? - onko tuo pelkkä kirjoitusvirhe (enddef?) vai onko tuo tarkoitukselle vain 1 d:llä ?

        2. Miksi ensin "endef" ja vasta sitten "ifdef" ?

        Ja heti ensimmäisenä:

        "
        //[ifdef]
        import java.sql.ParameterMetaData;
        //[enddef]
        "


        hmmm... miksi:

        //[ifdef]


        miksei:

        //[ifdef J2SE]

        tai

        //[ifdef J2ME]

        siis omassa tapauksessani. Toki tuolla voisi olla joku muu määre, mutta ifdef ilman *mitään* määrettä???

        Entäpä sitten tämä huomautus:

        "Attention: the source code is copied into two different root directory one for version 1 and the other for version 2. Because Ant tries to avoid copies if the file does not have changed this can lead to having the wrong version of code in your target directory."

        Missä tilanteissa siis on vaara, että Ant onnistuu saamaan aikaiseksi käännettäväksi kokonaan väärän version ja miten tuolta vaaralta vältytään ?

        Muutenkin, tuo Antin konfigurointi vaikuttaa varsin sekavalta.

        Miksei kieleen ole lisätty ifdef-else-endif -toiminnallisuutta. Tällä muuten ei välttämättä ole mitään tekemistä C/C -tyylisen esiprosessoinnin (preprocessor) kanssa, sillä esim. Delphissä ON {$IFDEF JokinSymboli}, {$ELSE} ja {$ENDIF}, mutta Delphissä silti EI ole esiprosessoria.

        Entäpä tuo "final boolean" -kikka?

        Siitä voi joissain olosuhteissa ollahyötyäkin, mutta:

        Javan tiukka "vain olioita" -politiikka aiheuttaa tässä harmia. Eli tuollaisen "final boolean" -muuttujan (eli itseasiassa vakion) on oltava olion jäsen.

        Toiseksi, sitäei voi käyttää ehdolliseen "import" -lauseeseen.

        Ja kolmanneksi, tätäkään ei voi tehdä:

        public class TCriticalSection {

        public final static boolean EiKoskaan = false;

        ... ja myöhemmin koodissa ...

        if (EiKoskaan) {
        //
        JokinOlematonRutiini();
        //
        }


        ...

        Tuo nimittäin aiheuttaa kääntäjäviorheilmoituksen.

        Eli asia ei olekaan niin yksinkertainen, että kun kääntäjä huomaa, että "EiKoskaan" on pysyvästi false, niin JokinOlematonRutiini() ei koskaan kutsuta, ja siksi ei haittaa, ettei sitä ole olemassa.

        Koska käytän Java -kehitysalustana Linux Netbeans, niin paras ratkaisu olisi ehkä luova yhdistelmä "include files" linuxin "soft links".

        mutta löytyykös Javasta sitten myöskään noita include filejä ?

        Ilmeisesti tuossa linkissä oli kirjoituvirheitä mutta jollet huomannut niin noi ifdef ja enddef olivat vain esimerkkejä. Ne olisivat voineet olla esim minna ja maija. Ant on hiukan hankala konffattava mut esim. netbeanssissä tuon build.xml:n konffaus pitäisi onnistua melko helposti.
        Et ilmeisesti tajunnut mitä noilla //[ifdef] ja //[enddef] (tai [minna] ja [maija]). Ne ovat tag:ja, joiden avulla Ant tietää mitä tehdään, eli tässä tapauksessa kommentoidaanko 1. osa vai 2. osa koodista.
        Tuohon väärään versioon niin, kuten se varoittaakin niin Ant yrittää välttää kopioita ja kääntää vain muuntuneet tiedostot. Tuon voi välttää poistaa ensin vanhan version.
        Koskaan en ole koodannu Delphillä, niin oletin sen toimivan samanlailla kuin C . Noi miksei Javassa ole -kysymykset ovat mielestäni aivan turhia. Jos tuollaisia ongelmia tulee eteen niin kannattaa miettiä ensin, että onko ohjelmassa suunnittelussa menny jotain vikaan, en vaan osaa ja viimeisenä ohjelmointikielen vaihtoa.
        JSP:ssä on include file mutta se on eri asia. Mut tietääkseni Javassa ei ole c :n tapasta include:a.


      • fidel1
        Mika0800 kirjoitti:

        Tuolla sivulla on muutamia sekavia asioita:

        "
        The // at the beginning of the tag ensures that this is still valid Java source code.
        To exclude code:

        /* //[endef]
        public byte[] getBytes(String parameterName) {
        ...
        }
        //[ifdef] */

        2. To swap the used code for version 2 the start and end tag just have to be set to /* respectively */.
        "

        Ensinnäkin:

        "endef" ? - onko tuo pelkkä kirjoitusvirhe (enddef?) vai onko tuo tarkoitukselle vain 1 d:llä ?

        2. Miksi ensin "endef" ja vasta sitten "ifdef" ?

        Ja heti ensimmäisenä:

        "
        //[ifdef]
        import java.sql.ParameterMetaData;
        //[enddef]
        "


        hmmm... miksi:

        //[ifdef]


        miksei:

        //[ifdef J2SE]

        tai

        //[ifdef J2ME]

        siis omassa tapauksessani. Toki tuolla voisi olla joku muu määre, mutta ifdef ilman *mitään* määrettä???

        Entäpä sitten tämä huomautus:

        "Attention: the source code is copied into two different root directory one for version 1 and the other for version 2. Because Ant tries to avoid copies if the file does not have changed this can lead to having the wrong version of code in your target directory."

        Missä tilanteissa siis on vaara, että Ant onnistuu saamaan aikaiseksi käännettäväksi kokonaan väärän version ja miten tuolta vaaralta vältytään ?

        Muutenkin, tuo Antin konfigurointi vaikuttaa varsin sekavalta.

        Miksei kieleen ole lisätty ifdef-else-endif -toiminnallisuutta. Tällä muuten ei välttämättä ole mitään tekemistä C/C -tyylisen esiprosessoinnin (preprocessor) kanssa, sillä esim. Delphissä ON {$IFDEF JokinSymboli}, {$ELSE} ja {$ENDIF}, mutta Delphissä silti EI ole esiprosessoria.

        Entäpä tuo "final boolean" -kikka?

        Siitä voi joissain olosuhteissa ollahyötyäkin, mutta:

        Javan tiukka "vain olioita" -politiikka aiheuttaa tässä harmia. Eli tuollaisen "final boolean" -muuttujan (eli itseasiassa vakion) on oltava olion jäsen.

        Toiseksi, sitäei voi käyttää ehdolliseen "import" -lauseeseen.

        Ja kolmanneksi, tätäkään ei voi tehdä:

        public class TCriticalSection {

        public final static boolean EiKoskaan = false;

        ... ja myöhemmin koodissa ...

        if (EiKoskaan) {
        //
        JokinOlematonRutiini();
        //
        }


        ...

        Tuo nimittäin aiheuttaa kääntäjäviorheilmoituksen.

        Eli asia ei olekaan niin yksinkertainen, että kun kääntäjä huomaa, että "EiKoskaan" on pysyvästi false, niin JokinOlematonRutiini() ei koskaan kutsuta, ja siksi ei haittaa, ettei sitä ole olemassa.

        Koska käytän Java -kehitysalustana Linux Netbeans, niin paras ratkaisu olisi ehkä luova yhdistelmä "include files" linuxin "soft links".

        mutta löytyykös Javasta sitten myöskään noita include filejä ?

        Kommentti tähän:

        > Ja kolmanneksi, tätäkään ei voi tehdä:
        >
        > public class TCriticalSection {
        >
        > public final static boolean EiKoskaan = false;
        >
        > ... ja myöhemmin koodissa ...
        >
        > if (EiKoskaan) {
        > //
        > JokinOlematonRutiini();
        > //
        > }

        Tämmöiset tilanteet tavataan hoitaa rajapinnoilla tai abstrakteilla luokilla. Eli kenttää "EiKoskaan" ei tarvita ollenkaan, vaan luodaan rajapinta, jossa määritellään metodi "JokinOlematonRutiini". Rajapinta toteutetaan kahdella eri luokalla, jossa toisessa tuo metodi tekee jotain ja toisessa ei. Sitten tapauskohtaisesti koodissa määritellään, kumpaa rajapinnan toteutusta käytetään.

        Ylipäätään koko sun ongelma on ratkaistavissa luomalla kaksi (tai useampi) luokkakirjasto tarpeen mukaan, jotka noudattavat yhteistä rajapintaa, ja koodata varsinainen sovellus pelkästään tätä rajapintaa vastaan. Ajoaikaisesti voidaan sitten valita kumpaa (mitä) varsinaista toteutusta käytetään. Ei tarvitse kikkailla ant:in tai minkään muunkaan kanssa.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Toiko Helen laivalastillisen vieraslajeja Suomeen?

      Loviisan satamaan tuotiin laiva­lastillinen pähkinän­kuoria Norsun­luu­rannikolta Loviisan satamaan kiinnittyi vapun al
      Maailman menoa
      126
      2622
    2. Elikkä Riikka Purra ei kannusta Suomea edes euroviisuissa

      Sellaista on persujen "isänmaallisuus", oma kansa viimeiseksi ja ulkomaalaiset ensimmäisiksi. https://www.iltalehti.fi/
      Maailman menoa
      55
      2022
    3. Koulujen kesälomien siirto

      Koulujen kesälomaa voitaisiin siirtää viikon verran. Se voisi olla hyvä kompromissi. Pääsiäsiseen voitaisiin lisätä muut
      Maailman menoa
      134
      1760
    4. Riikka: 3 euron bensa, Ruotsi: bensavero jopa alle EU-minimin

      Eipä vaan suomalainen autoilija saa kaikkien rakastamalta Riikalta sympatiaa. Ruotsissa on eri meininki, siellä diskutee
      Maailman menoa
      20
      1649
    5. Mitä kirjainta haluaisit

      rakastella juuri nyt?
      Ikävä
      117
      1577
    6. Inhottava stalkkeri

      Mikä ajaa ihmisen moiseen toimintaan ?
      Ikävä
      138
      1298
    7. Victoria-tytär, 16, vertaa Martina Aitolehteä ja Esko Eerikäistä: "Iskä on enemmän..."

      Martina Aitolehti ja Esko Eerikäinen ovat ex-pari ja heillä on yksi yhteinen tytär, Victoria. Eerikäinen oli Huomenta Su
      Kotimaiset julkkisjuorut
      81
      1028
    8. Nainen, mistä johtuu että joskus et vain ymmärrä?

      Älä sitä, älä tätä. Ei niitä varoituksia turhaan sanota. Älä laita sormeasi sirkkeliin. Älä hengaile sen murhaaja poruka
      Ikävä
      144
      1025
    9. "UKRAINA HYÖKKÄÄ LATVIAN ÖLJYVARASTOON JA JUNAAN"!!!

      "MATKUSTAJAJUNA SAI UKRAINALAISLENNOKEISTA VAKAVIA VAURIOITA"!!!
      Maailman menoa
      48
      972
    10. Yhä pyörit mielessä,

      ja tällä kertaa huomasin yhden asian: Sinusta välittyi sellaista lempeyttä ja välittämisen tunnetta, jota ei voi unohtaa
      Ikävä
      29
      907
    Aihe