           o 'getMethod(J)I', (rs, jzentry) -> 0 # STORED (i.e. uncompressed)
           o 'read(JJJ[BII)I', (rs, jzfile, jzentry, pos, byte_arr, offset, len) ->
               ze = rs.get_zip_descriptor jzentry
+              file = ze.file ? fs.openSync ze.fullpath, 'r'
               if node?
                 pos_int = pos.toInt()
-                bytes_read = Math.min(ze.file.length - pos_int, len)
-                byte_arr.array[offset+i] = ze.file[pos_int+i] for i in [0...bytes_read] by 1
+                bytes_read = Math.min(file.length - pos_int, len)
+                byte_arr.array[offset+i] = file[pos_int+i] for i in [0...bytes_read] by 1
               else
                 buf = new Buffer len
-                bytes_read = fs.readSync(ze.file, buf, 0, len, pos.toInt())
+                bytes_read = fs.readSync(file, buf, 0, len, pos.toInt())
                 byte_arr.array[offset+i] = buf.readUInt8(i) for i in [0...bytes_read] by 1
               return if bytes_read == 0 and len isnt 0 then -1 else bytes_read
         ]

  # we don't actually load from this file, but it has to look like a valid filename
  'sun.boot.class.path': '/System/Library/Frameworks/JavaVM.framework/Classes/classes.jar',
  # this doesn't actually exist in our classes.jar, but no other GraphicsEnvironment does either
  'java.awt.graphicsenv': 'sun.awt.X11GraphicsEnvironment'
}

get_field_from_offset = (rs, cls, offset) ->

                # yep, hardcoded. though I'm not sure a correct value actually matters...
                return 21090
              zipfile = rs.get_zip_descriptor jzfile
              unless zipfile.entries?
                zipfile.entries = {}
                add_entries = (dir) ->
                  curr_dir_entries = fs.readdirSync dir
                  for name in curr_dir_entries
                    fullpath = "#{dir}/#{name}"
                    stat = fs.statSync fullpath
                    zipfile.entries[fullpath] = rs.set_zip_descriptor {fullpath,name,stat}
                    if stat.isDirectory()
                      add_entries fullpath
                add_entries zipfile.path
              _.keys(zipfile.entries).length
          o 'getEntry(JLjava/lang/String;Z)J', (rs, jzfile, name, add_slash) ->
              zf = rs.get_zip_descriptor jzfile
              entry_name = rs.jvm2js_str name
