{"id":1578,"date":"2015-07-18T21:22:21","date_gmt":"2015-07-18T13:22:21","guid":{"rendered":"http:\/\/www.magicandlove.com\/blog\/?p=1578"},"modified":"2015-07-18T21:30:05","modified_gmt":"2015-07-18T13:30:05","slug":"load-external-class-in-processing","status":"publish","type":"post","link":"http:\/\/www.magicandlove.com\/blog\/2015\/07\/18\/load-external-class-in-processing\/","title":{"rendered":"Load external class in Processing"},"content":{"rendered":"<p>It is a short side project away from the OpenCV and Processing thread. In this example, I would like to see if I can load an external class within a Processing sketch. The structure of the program is:<\/p>\n<p><!--more--><br \/>\n<em>Main program<\/em><br \/>\nTestLoad001<\/p>\n<pre lang=\"java\">\r\nimport java.lang.reflect.Method;\r\n\r\nvoid setup() {\r\n  size(640, 480);\r\n}\r\n\r\nvoid draw() {\r\n  background(0);\r\n}\r\n\r\nvoid mousePressed() {\r\n  MyLoader ldr = new MyLoader();\r\n  Class myObj = ldr.load(\"MyTest\");\r\n  Object oo;\r\n  try {\r\n    oo = myObj.newInstance();\r\n    println(\"Class name: \" + oo.getClass().getName());\r\n    Method m = oo.getClass().getMethod(\"ShowMe\");\r\n    println(\"Method name: \" + m.getName());\r\n    m.invoke(oo);\r\n  } \r\n  catch (Exception e) {\r\n    e.printStackTrace();\r\n  }\r\n}\r\n<\/pre>\n<p>&nbsp;<br \/>\n<em>Loader class<\/em><br \/>\nMyLoader (a subclass of ClassLoader)<\/p>\n<pre lang=\"java\">\r\nimport java.net.URL;\r\nimport java.net.URLConnection;\r\nimport java.io.ByteArrayOutputStream;\r\n\r\npublic class MyLoader extends ClassLoader {\r\n\r\n  public MyLoader() {\r\n    super();\r\n  }\r\n\r\n  public Class load(String _c) {\r\n    try {\r\n      String url = \"file:\" + dataPath(_c + \".class\");\r\n      URL addr = new URL(url);\r\n      URLConnection conn = addr.openConnection();\r\n\r\n      InputStream in = conn.getInputStream();\r\n      ByteArrayOutputStream buf = new ByteArrayOutputStream();\r\n      int num = in.read();\r\n      while (num != -1) {\r\n        buf.write(num);\r\n        num = in.read();\r\n      }\r\n      in.close();\r\n      byte [] data = buf.toByteArray();\r\n\r\n      return defineClass(\"MyTest\", data, 0, data.length);\r\n    } \r\n    catch (Exception e) {\r\n      e.printStackTrace();\r\n    }\r\n    return null;\r\n  }\r\n}\r\n<\/pre>\n<p>&nbsp;<br \/>\n<em>External class (compiled and placed inside the data folder)<\/em><br \/>\nMyTest<\/p>\n<pre lang=\"java\">\r\npublic class MyTest {\r\n\r\n  public MyTest() {\r\n    System.out.println(\"MyTest object instance created.\");\r\n  }\r\n\r\n  public void ShowMe() {\r\n    System.out.println(\"ShowMe method called.\");\r\n  }\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>It is a short side project away from the OpenCV and Processing thread. In this example, I would like to see if I can load an external class within a Processing sketch. The structure of the program is:<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[66],"tags":[62],"class_list":["post-1578","post","type-post","status-publish","format-standard","hentry","category-testing","tag-processing-org"],"_links":{"self":[{"href":"http:\/\/www.magicandlove.com\/blog\/wp-json\/wp\/v2\/posts\/1578","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.magicandlove.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.magicandlove.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.magicandlove.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.magicandlove.com\/blog\/wp-json\/wp\/v2\/comments?post=1578"}],"version-history":[{"count":6,"href":"http:\/\/www.magicandlove.com\/blog\/wp-json\/wp\/v2\/posts\/1578\/revisions"}],"predecessor-version":[{"id":1584,"href":"http:\/\/www.magicandlove.com\/blog\/wp-json\/wp\/v2\/posts\/1578\/revisions\/1584"}],"wp:attachment":[{"href":"http:\/\/www.magicandlove.com\/blog\/wp-json\/wp\/v2\/media?parent=1578"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.magicandlove.com\/blog\/wp-json\/wp\/v2\/categories?post=1578"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.magicandlove.com\/blog\/wp-json\/wp\/v2\/tags?post=1578"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}