As others have mentioned you can't really "fix" Java. Many "fixes" would involve changing the language so fundamentally it would no longer be Java. You can't "fix" Java if you prefer Perl in the same way you can't "fix" C++ if you prefer Common Lisp. You pick the language that best suits your needs and experience.
That said... if I could change Java I'd want :-)
- Better portability. Yes portability. I still have fewer cross-platform issues with Perl than I do with Java (to be fair Java is a lot better than it was, and improving all the time.)
- Allow multiple inheritance of implementation. There are problems with some implementations of multiple inheritance. I don't think Java's solution (only allow multiple inheritance of interface) is the right one. This won't change since it's a philosophical difference.
- Allow runtime access to the compiler. I miss eval. This won't change.
- Allow overloading of operators. I find this clarifies more than it obscures. Other people disagree. This won't change.
- Addition of closures. Anonymous inner classes are of some use, but I miss the power and conciseness of proper closures.
- Addition of generic classes. The Java Collections framework can be a major pain. Any language that forces me to use a cast to tell it what kind of object is being referenced is broken. Fortunately generic types are being added to the next version of Java.
- Addition of data tainting to the core language. Perl's "don't trust the data" security model is more useful to me than Java's "don't trust the code" model the vast majority of the time.
- Remove primitive types. The whole boolean/Boolean thing is a confusing mess and the language would be better without them. In my opinion of course :-) This won't change.
- Remove compile time checking of exceptions. I find this gets in the way more than it helps. You pay too heavily if you change the exceptions a class throws. Other people disagree. This won't change.
- Some sort of CPAN. 'Nuff said :-)
- A less verbose and more flexible syntax. Java borrows to much from C++ for my tastes. I find it unnecessarily verbose to write. Things that take a few lines of Lisp or Perl take many more lines of Java. Not fixable without creating a new language.
- "Standard" APIs that stay the same for more than a point release. You have to spend so much time figuring out what's core and what's not core for what version of Java, and which minor non-upward compatible API change needs to be dealt with.