C# and Java are both hybrids of interpreted and compiled languages. Java is compiled to Java bytecode, and the JVM runtime interprets it into native instructions. C# is compiled in MSIL (Microsoft Intermediate Language), and the .NET runtime interprets the MSIL into native instructions. Both C# and Java have means of interacting directly with native binaries. Java has the Java Native Interface (JNI), and while .NET doesn't have a particular name for it, .NET applications can interact with native assemblies as well. Since C and C++ compile to native assemblies, it's possible to interface Java or .NET code with the binaries generated from C and C++ code.
When you hear about an interpreted language using a native binary, it's usually for one of two reasons, in my experience. The first is because what the native binary does is complex enough that the interpreter's inefficiencies actually make a large difference in performance. Less performance critical code can still be written in interpreted languages without noticeable impacts on overall performance, and the things the interpreted language gives you speed up development and improve quality. (For example, most interpreted languages do memory management automatically.) The other reason is reuse. Many tools (such as database drivers) are provided in native format; providing a wrapper around the native binaries is a simpler, cheaper (and probably more reliable) option than trying to re implement all that code in the interpreted language. Most interpreted languages provide a native interface because these practices are so widely used.
There is no officially supported means of interfacing .NET and Java code. They are both interpreted languages, and it's rare to find languages interfacing with any kind of library besides native.
Whether it's "too hard" to learn C# is an entirely subjective question and heavily dependent on your current knowledge and experience as well as the scope of the other application and the timeline. As such, we can't answer that for you.