Ok a bit late to add to this conversation, but I'm a professional software developer and have a lot of experience with various languages, and I often get asked this stuff by folks on my online game, so where is the advice I have to offer.
Java is free, well supported, and cross platform. Making graphical application swith Java is extremely easy. I highly recommend it for general purpose computing. All your users need is a Java runtime installation, which is fairly ubiquitous, and an easy free download if they lack one.
If you want to make something that is very performance sensitive, such as a high end 3D game or processing-intensive application, C or C++ is the route to go (C++ is a superset of C; any well written C program is a valid C++ program, just not utilizing C++-specific features). However, to do anything beyond basic text I/O user interactivity, you're going to have to adopt platform specific APIs to some extent. You'll be tied to your platform if you don't have access to the other OSes you want it to run on, unlike Java, where you can be reasonably sure it will run. Building binaries for multiple platforms is not easy, either.
Python, Perl, and Ruby all tend to be problem-domain specific and are excellent if you need a solution for something they are built for, but they are not good as general-purpose languages like Java, and are not nearly as well supported as Java. It requires much more work on the end-users part to use.
Any other languages are not worth learning except for academic or task-specific purposes.