As others have pointed out, the potential uses are nearly the same. They're both modern, general-purpose programming languages suitable for just about anything you can imagine. And yes, Python is usually a good way to write cross-platform software. I'll point out these differences and their implications, though:
- As others have pointed out, Python helps you get things done quickly. There's less ceremony in throwing together a small application, so it's probably a better choice for scripting and for developing small command line tools.
- Java has vastly better tools support, especially with respect to IDE's. This is at least partially due to the fact that Java is statically typed. Java's also a lot more verbose than Python, so you have a greater need for those tools with Java than you might with Python.
- Want multithreading? Go with Java. Java's shared memory model of concurrency is far from perfect, but you're almost certainly going to see better throughput than you would with Python. Java's concurrency libraries since 1.5 are pretty nice, too. On the surface Python seems to offer a lot of the same functionality with its threading module, but thanks to GIL you usually end up hurting your performance... but you won't have as many problems with deadlocks either.
- Both have lots of choices in web frameworks, and some of them are actually quite good. Personally I prefer Python's offerings, but that's probably more due to my areas of greatest experience (Django vs. Struts really isn't much of a contest).
My personal experience is that, unless there's some particular library that I need to use in one language, I often start out preferring to work in Python. Once the project starts to climb up into thousands of lines of code, I find myself yearning for Java's tools. Of course, you can get a lot more done with a thousand lines of Python than you can with a thousand lines of Java.
If you really want to use Python but want some Java library or concurrency support, just try Jython.