Of course, now that Apple’s deprecating Java, that’s probably going to annoy the folks
- Using the Cyberduck S/FTP/WebDAV/etc. client
- playing Minecraft.
MacGeekery at its finest!
Java running on the Mac under Mac OS X
Of course, now that Apple’s deprecating Java, that’s probably going to annoy the folks
Having thought about what I actually use Java for on Mac OS X (now that Apple’s indicated it’s deprecated). Probably the main ones are
I guess I’ll just have to fire up Java under Windows in Parallels? I guess if I’m happy to give Google all my information I could replace my use of NeoOffice with Google Docs.
Apple’s recently released Java for Mac OS X Update 3 includes the following information in the developer release notes:
As of the release of Java for Mac OS X 10.6 Update 3, the version of Java that is ported by Apple, and that ships with Mac OS X, is deprecated.
This means that the Apple-produced runtime will not be maintained at the same level, and may be removed from future versions of Mac OS X. The Java runtime shipping in Mac OS X 10.6 Snow Leopard, and Mac OS X 10.5 Leopard, will continue to be supported and maintained through the standard support cycles of those products.
So, either Steve’s had a chat with Larry and Oracle’s going to be doing the Java build for Apple, or Apple isn’t going to have Java apps running on Mac OS X, which is going to add to the pain for educational institutions, and developers who want to write cross platform code more easily (although these days many would argue that this is possible with Javascript and HTML5 no doubt). No doubt it’s also that Java apps don’t look and feel so much like Mac Apps, which seems to be one of Steve’s reasons for ditching Flash.
Apple has released (via Software Update) “Java for Mac OS X 10.5 Update 1”, which installs Java 1.6.0_05 (although it does not make it the default version of Java for the machine.
bash-3.2$ /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Commands/java -version
java version "1.6.0_05"
Java(TM) SE Runtime Environment (build 1.6.0_05-b13-120)
Java HotSpot(TM) 64-Bit Server VM (build 1.6.0_05-b13-52, mixed mode)
The software update is installed only on 64-bit capable Macs. To switch it to the default Java install you need to use the /Applications/Utilities/Java Preferences application (which states when you select it that “Java SE 6 is only available for Java applets in 64-bit capable browsers. J2SE 5.0 will be used in 32-bit-only browsers, including Safari”)
Discussions indicate that compiled JNI libraries don’t look like they currently work, and neither do QuickTime for Java applications:
/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Commands/java quicktime.QTSession
java.lang.reflect.InvocationTargetException
at java.awt.EventQueue.invokeAndWait(EventQueue.java:997)
at quicktime.QTSession.(QTSession.java:92)
Caused by: java.lang.UnsatisfiedLinkError: /System/Library/Java/Extensions/libQTJNative.jnilib:
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1822)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1715)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1030)
at quicktime.QTSession$1.run(QTSession.java:94)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:300)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:210)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:200)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:195)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:187)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Exception in thread "main" java.lang.NoSuchMethodError: main
This is not surprising given that QuickTime for Java is based on 32-bit Carbon libraries, and has been effectively in “maintenance mode” for a while. Unfortunately someone manages to get the JNI (or JNA?) code working it’s going to be difficult to work around the problem using QTKit.
In the meantime, QuickTime for Java still muddles along in Java 5. Eclipse Ganymede also seems to launch ok, but I haven’t done anything extensive with it.
From Apple’s java mailing list:Â
Â
We are looking for a talented, passionate and motivated engineer to join the Java team. Java expertise, of course, is important, but C and Objective-C (Cocoa) are also essential since you will be working on the frameworks underneath AWT and Swing. If you or anyone you know is interested, please do apply. This is an opportunity to have a serious impact on the Mac OS X Java implementation, and start a career at Apple.You can find out more by clicking this link, or by searching apple.com/jobs for Requisition ID 3489430.Â
Â
Fans of Java 6 who want to be able to access it on Leopard (as Apple hasn’t released it or announced when it will do so) may want to check out this post (and include the tag mentioned). Note also the efforts to do an open source port of Java 6.
It turns out that if your Java app is getting IPv6 addresses back from InetAddress.getLocalHost().getHostAddress() you can use flags to the Java VM to control this behaviour
-Djava.net.preferIPv4Stack=true
if you only want IPv4 addresses returned, or
-Djava.net.preferIPv6Stack=true
if you need to test your code against IPv6 addresses. These flags are only valid when passed to the JVM when it’s started up (ie they can’t be changed once the App’s running).
mostly via the quicktime-java list.
From a a post to the QuickTime-Java mailing list, Apple’s response regarding QuickTime exception -1409=Unknown:
QuickTime for Java currently provides no B-Frame sample-level support. The movie FigtreeChurch.mov, as provided by you, is encoded using H.264 (Main Profile) which utilises B-Frames. As verification, replacing FigtreeChurch.mov with a movie of another codec type functions with the your application as expected.
Chris Adamson (author of QuickTime for Java: A Developer’s Notebook) says:
QuickTime 7 adds new image compression API’s, which were necessitated by the addition of the frame-reordering H.264. These API’s, like ICMCompressionSessionEncodeFrame, were never wrapped by equivalent QTJ calls, and sending the new codec to the old image compression API produces an error.
If you’re looking to update your Java source for EasyX509TrustManager.java or EasySSLProtocolSocketFactory.java to Java 1.5.x then you can find the updated versions in Apache’s Jakarta SVN repository (Because they weren’t immediately obvious to me when I was googling).