I found a bug for the tightvnc java library, if my setup like this
tightvnc (java) -> java proxy server -> java proxy server -> vnc server
IT doesn’t work, after I trace the code, this could caused by this line:
this.is = new DataInputStream(new BufferedInputStream(is));
In Reader.java constructor, it is called twice. You can see that if you set a breakpoint in doInBackground() in SwingRfbConnectionWorker. The BufferedInputStream will cache the bytes immediately, so if it is called two times, the cached bytes will exist in one reader instance only. So I think this is the root cause.
To fix it, please change the code to “private static DataInputStream is;”, I changed the “DataInputStream is;” to static, so make sure the buffered bytes are cached into same stream, then the bug gone.