Initialization exception can be avoided if Factory class is
initialized indirectly:

(let [factory (.newInstance (Class/forName "gate.Factory"))] ...)

The problem is that Factory can only be initialized (its static
fields) after Gate.init was called. But clojure reader (or what it is)
initializes all the classes mentioned in the namespace. Thus Factory
gets created before cojure function calls which do Gate/init.

Is this workaround ok? Or are there better ways to solve it?

On Aug 30, 2:39 pm, zm <zygiman...@medelis.lt> wrote:
> Indeed if exception is thrown in static initializer block then clojure
> import throws exception as well.
>
> The following class will cause this:
>
> package aaa;
> public class Test {
>         static{
>                 Object o = null;
>                 o.toString();
>         }
>
> }
>
> Then in clojure:
>
> (ns x (:import (aaa Test))
>
> Results in:
>
> Exception in thread "main" java.lang.ExceptionInInitializerError
> (core.clj:1)
>
> Why does this happen in clojure? If you do the same in java, import
> aaa.Test, then nothing happens. NLP will be thrown when you actualy
> try to initialize the class.
>
> On Aug 30, 6:12 am, Stuart Campbell <stu...@harto.org> wrote:
>
>
>
> > Hello,
>
> > I don't know this library specifically, but the NPE is probably occurring in
> > a static initialisation block. I believe static initialisation occurs when
> > the class is first loaded.
>
> > Regards,
> > Stuart
>
> > On 30 August 2010 06:42, zm <zygiman...@medelis.lt> wrote:
>
> > > I am using GATE java libs in my clojure code and behaviour of the
> > > application changes after Java class import. I don't even have to
> > > initialize it.
>
> > > This runs fine (a bit shorter version than it is):
>
> > >  (ns gate
> > >  (:import
> > >     (gate Gate)
> > >     (java.io File)))
>
> > > (defn gate-init
> > >  [gate-home]
> > >  (Gate/setGateHome (File. gate-home))
> > >  (Gate/init)))
>
> > > Now if I import gate.Factory class, like this (gate Gate Factory), I
> > > get the exception:
>
> > > Caused by: java.lang.NullPointerException
> > >        at gate.Factory.createResource(Factory.java:154)
>
> > > How can import of a class cause this?
>
> > > --
> > > You received this message because you are subscribed to the Google
> > > Groups "Clojure" group.
> > > To post to this group, send email to clojure@googlegroups.com
> > > Note that posts from new members are moderated - please be patient with
> > > your first post.
> > > To unsubscribe from this group, send email to
> > > clojure+unsubscr...@googlegroups.com<clojure%2bunsubscr...@googlegroups.com
> > >  >
> > > For more options, visit this group at
> > >http://groups.google.com/group/clojure?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to