For a chat-type application, it seems like a UI that users will think of as nice is a necessity. That pretty much immediately rules out Java. Though maybe not quite as obviously and quickly, it pretty much rules out anything with Silverlight/.NET as well, when you factor in portability. Basically, with .NET you'd want to use WPF on Windows -- but Mono doesn't support that. You could use GTK+, but if you do Windows and Mac users probably won't like it much. If you want a nice, reasonably native-looking UI, you can manage that by using GTK+ on Linxu, MonoMac on the Mac/iPod/iPad, and WPF on Windows -- but by then, you're a long ways from the "do it once and do it right" requirement.
IMO, Adobe Flex isn't much of an option. You can use Adobe AIR to deploy a Flex web app to a desktop, but it's still basically a web app running on a desktop, not a desktop application. Since you're writing to a web-app API, you're pretty much stuck with all the limitations of a web app and can't do much to take advantage of its being a desktop app. Since you're deploying it to a desktop, you can't do much to take advantage of its being a web app either though. You end up with all the limitations of both, and none of the advantages of either.
Unfortunately, the only other choice you've given (using the Win32 API directly) is probably worse than any of the above. Along with relatively slow development, you get code that's quite non-portable and will need almost a complete rewrite to work on any other platform.
That means you pretty much need to consider something else. It seems to me that the obvious possibility would be C++ with Qt. Obvious advantages include:
- Native look/feel on each platform.
- Competitive productivity.
- Excellent performance
The obvious shortcoming (that I can see) is lack of portability to two specific portable platforms: Windows 7 and Android phones. For better or worse, there is no one choice that supports both of these. Windows 7 phone is .NET only, and Android is Java only.