I have created an expiremental backend for lcc which compiles to java source code. While it is always better to port your C code to java by some other means, it can be difficult, especially when the C code in question uses features which are not support by java (such as goto and unions) and also when the execution speed of the ported code is not critical.
The backend files must be installed into the lcc-4.1 directory in order to work. There is an installation and usage document that tells how this works. Once you have done the installation and compiled the examples, you will be able to compile C sources to Java source and call them from your java sources as normal. Note that arguments to C functions are pushed onto the C stack, and that C return values are passes in c_program.eax (yes, this backend came from x86). Compiled code either called by or calling compiled C programs must use the C stack, and C return convention. I'd like some feedback on making this easier (possibly by making the proxy functions written into the compiled class files do this automatically).
I didn't combine these because of the license on lcc-4.1, which can be found here my sources are under GPL and lcc-4.1 is not, although the license allows me to distribute it here for noncommercial use.