I agree with the Qt option, as it clearly produces some nice & performant music applications. But you're still programming in C++ which is tedious because of memory management; also "hard realtime" often precludes the use of Garbage collectors. Of course Java has RT garbage collectors available: http://java.sun.com/developer/technicalArticles/Programming/rt_pt2/ although some may find "soft realtime" garbage collection as provided by the new G1 garbage collector sufficient: http://research.sun.com/jtech/pubs/04-g1-paper-ismm.pdf ... see also: http://blog.headius.com/2009/01/my-favorite-hotspot-jvm-flags.html

Lots of interesting Java-based music apps exist, with GUIs:
http://jmusic.ci.qut.edu.au/applications.html
http://www.softsynth.com/links/java_music.html

GUI application programming might be a little more forgiving in Java, although Java is a pain-in-the ass language, where you spend more time building and understanding scaffolding than you actually do programming... part of the scaffolding are the "design patterns" needed to work-around fundamental issues with primitive strongly typed languages like Java and C++ ( http://www.tiagoluchini.eu/2007/07/28/strategy-pattern-comparing-java-x-lisp/ ). 

The good thing is you don't need to use Java anymore, but can take advantage of its portability, security, advanced garbage-collection options,  and just-in-time compiler advances that may give it a performance advantage, these days.... But you don't have to program in Java, you write in http://groovy.codehaus.org/ or http://clojure.org which means you can do really high-level things with just a few lines of groovy code ( http://lists.xwiki.org/pipermail/users/2009-August/016937.html ).
Fortunately, several million unfortunate souls have slogged through all the hard work and made a huge library of functionality for people to use, much of it open source. 

http://curious-attempt-bunny.blogspot.com/2009/01/simple-clojure-graphics-api.html is a good example of the concision made possible by clojure...

Clojure may be of particular interest in realtime multiprocessor/multithreaded apps because of its high level., language-level support for concurrency and multithreaded programming ( http://clojure.org/concurrent_programming  ) as well as potential support for Software Transactional Memory, which is analogous to garbage colleciton for threads ( http://www.stanford.edu/class/cs242/readings/TMvsGC.pdf 
http://java.ociweb.com/mark/stm/article.html ).