WebHU - Programozási kérdések és válaszok

Az ImageIO importálása nem működik Clojure

Kicsit kezdő vagyok a Clojure-ban, de nem értem, mi a baj a kódommal.

Az alábbi kódnak tudtommal imgegy új BufferedImage objektumra kell állítania.

(import javax.imageio.ImageIO)
(import java.io.File)
(def img (ImageIO/read (File. "C:\\input.png")))

Amikor azonban végrehajtom a lein run parancsot, ezt a kivételt kapom:

Exception in thread "main" java.lang.RuntimeException: No such namespace: ImageIO, compiling:(fstego/core.clj:8:14)
18.06.2015

  • Tökéletesen működik a REPL-ben. Be tudná illeszteni a ns deklarációt a src/fstego/core.clj tetejére? 18.06.2015
  • Milyen Java verziót használsz? 18.06.2015

Válaszok:


1

Nem biztos benne, hogyan tud futni

lein run 

-main metódus nélkül, ezért itt van néhány mintakód:

project.clj

  (defproject testi "0.1.0-SNAPSHOT"
     :main fstego.core
     :dependencies [[org.clojure/clojure "1.6.0"]])

src/fstego/core.clj

  (ns fstego.core
    (:import [javax.imageio ImageIO])
    (:import [java.io File]))


  (defn -main[& args]
   (if-let [ path (first args) ]
    (let[ img (ImageIO/read (File. path))]
     (println 
      "Input Image has the following dimensions: " 
      (.getWidth img) "x" (.getHeight img)))
    (println "No image")))

És akkor

lein run <path_to_image>

Valami ilyesmit kellene kiadnia:

Input Image has the following dimensions:  251 x 60

Szerkesztés Miért nem található a java import a lein run futtatásakor?

A névtér fő metódusának futtatása előtt a fordítási fázis lefut, és a konkrét direktíva nélkül a névteret idő előtt lefordítják (aot néven) Java-ra. A funkció letiltásához hozzá kell adnia ezt a project.clj fájlhoz

:main ^:skip-aot fstego.core

Ha megtisztítja a célmappát, és újra végrehajtja a lein run parancsot, az importálást mindenhol megtalálja, ahol hozzáadja őket.

Ha nem adja meg a feladat kihagyását, vagy ha közvetlenül egy jar fájlból szeretné meghívni a fő metódust, akkor az életciklus más.

A névtér futtatása azt jelenti, hogy a kód ugyanúgy fut le, mint a REPL-ben, így az importhívások végrehajtásra kerülnek, és a hivatkozott osztályok megtalálhatók.

A fő metódus közvetlenül a lefordított bájtkódból történő futtatása azt jelenti, hogy az importálási hívás nem szerepel a bájtkódban, így figyelmen kívül hagyja, így az ImageIO hívása nem találja meg megfelelően az osztályt.

19.06.2015
  • Oké, megtaláltam a problémát. Úgy tűnik, bármilyen okból, ha az importálást a fő függvényben végeztem, az nem fog működni. Ha megteszem őket a névtér-deklarációban, akkor jól működik. 20.06.2015
  • Hozzáadott némi betekintést, hogy miért nem található az ImageIO. 22.06.2015
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..