PasswordSafeSWT 0.3 ships - now with cool new toolbar!

I’ve finally managed to get 0.3 of PasswordSafeSWT out the door (a blowfish-based personal password manager for Java) . New in this release:

Interestingly the toolbar was submitted as a user suggestion on the PasswordSafe Feature Requests (Thanks DeeLight!). Feature requests are just a gold mine of good ideas! I’m going to do some more digging on that list. One feature that was suggested was a Firefox import. I’d love to get that in 0.4, but I’ll see how I go digging through that C++ source…

New Look Toolbar

Anyways, I’m waiting for the CVS source commits to finish against SourceForge as I type this. For now you can grab source and platform binary bundles at the usual spot while Rony helps me work through getting the binary release process setup for the Java project.

[Read More]

Using JFreeChart with SWT

Whichever way you look at it, JFreeChart is one sensational charting library. So, what do you do if you’re hacking SWT apps?

Couple of options. You can use the SWT_AWT bridge stuff and take your chances on non-Windows platforms. Or, you can use some very nifty code here on the jfree forums to create an SWT Image from an AWT BufferedImage. (I’m using the code from Til at the bottom of the forum dated 12 Jan, 2005).

I’ve got a little project that I’m working on related to spamfiltering, so I though I’d mock up some charts to see if this stuff actually works. In this grab, I’ve created two CLabels, and called setImage() with the data returned from Til’s helper function. Gotta be happy with that!

JFreeChart Embedded in an SWT CLabel

Awesome! I’ve got a sensational charting package without the need to do scary stuff with embedded AWT/Swing panels in an SWT app! Thanks to the Til and the other brave souls who did the hard yards!

[Read More]

PasswordSafeSWT 0.2 leaves the building...

The latest release of my SWT port of Passwordsafe went out the door this morning. This version fixes a bunch of layout issues on various platforms, adds sorting of password lists, implements password generation.

PasswordSafeSWT 0.2 Running on Mac OSX

You can grab source and binaries for Mac/Linux/Windows at my local site. This release is bound for the Sourceforge PasswordSafe project page - and should arrive there later this week if you want to wait for a much faster download link.

[Read More]

Getting your logging working in Jetty

I love Jetty. It’s starts in 3 seconds, it’s a coupla jars, its config file is sensible to me, and it’s Australian. But I’ve hit issues with Jetty and logging before (specifically commons logging)… so I’m going to blog about this before I forget it (and so I can Google for it later - cause I keep forgetting the fix).

Here’s the scenario, you’ve installed your webapp on Jetty and you’re wondering why your commons logging stuff is stuck at INFO level. You’ve tried copying commons-logging.properties and log4j.properties files all over the place, but no joy.

Turns out that Jetty implements its own commons logging factory, so you might not be having any luck overriding it. It also turns out that your options are actually well documented on the Jetty site, but the short answer, to save you some digging, is that it’s all very configurable.

One thing I’ve just done is use the specific -D option for the log factory (per the example on their site). So you end up with a start line of:

java -Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger -jar start.jar

… and all my DEBUG logs started coming back. Love that Jetty goodness.

[Read More]

PasswordSafeSWT 0.1 goes out the door...

It was a big weekend. Installed a new cistern in the ensuite, took my family to the zoo, and packaged up a very early copy of my SWT port for Mac, Linux, and even Windows. Here’s a grab of the original Win32 C++ version of PasswordSafe:

Win32 Version of PasswordSafe

And here’s a copy of my PasswordSafeSWT port running on Windows:

PasswordSafeSWT 0.1 running on Windows

Aside from the icons needing some photoshopping, and the toolbar button being a little too wide, I’ve been very happy with the result. Screenshots are also online for Mac and Linux .

This is a 0.1 release, really just an excuse to get something out the door and feel like I’m getting somewhere. There’s still lots to do, but there is actually a lot in here. Load/Save/Add/Edit/Delete/Change Password/Export/Rightclicks… so this release is actually pretty functional for a 0.1! I’ve put a growing list of “TODO” items in the src package, but it feels good to finally get it out the door.

I’m hoping to migrate into the Sourceforge project once I get some peer review from the developer list, but for now, you can grab an “at your own risk” copy from my downloads page. Source is up there too.

After a little research, I even managed to create a dmg file for the Mac after reading this very helpful post. Wonder if there’s a DMG Ant task out there… it’s currently the only manual part of the build, so that would be very cool.

Anyways, enjoy. And be nice… since this is my first official attempt to put some Open Source out there.

[Read More]

Bundling SWT Apps for MacOSX

So you’ve written your killer SWT app and you’re keen to bundle it in a nice clickable Mac application bundle for distribution on OSX? Such has been my journey for last few days. I reckon I’ve sunk around 10 hours into just this process over the last week, but I now have it working. First, let me show show off: (it’s good therapy)

PasswordSafeSWT Icon in the Finder

Ok, the resources that you need to read are:

I’m a Mac newbie, so it took me a while to work out why my app would launch, bounce a few times in the dock, then die. You can find out why via the Console application (Applications/Utilities/Console) - which is where the errors get dumped from the lauching process. That’s when I worked out it couldn’t load the .jnilib files even though they were in java.library.path (since they weren’t chmoded executable).

The other thing that I couldn’t get working was using $JAVAROOT in an Info.plist setting for java.library.path. It would just never get expanded by the launcher. I ended up cutting my losses and just copying the my .jnilib files to the same directory as the rest of my jars.

BTW, I’ve been using the jars from Eclipse 3.1RC1 to get all this happening. Earlier jars required you to use a special java_swt launcher to fix those threading issues I was talking about, but the 3.1 stream just uses the standard JavaApplicationStub launcher which is just easier all round.

Eclipse 3.1 also has this “Export To… Mac App Bundle” option but it just tanked every time I tried it, so that might be one to sleep till the final release.

Have fun! Hopefully all this will save you some pain!

[Read More]

What I should have known about javax.servlet.http.Cookie

After beating my head against a wall for three hours wondering why setPath() and setDomain() were just not working on my Cookie object…. I got a brainwave. Maybe it wasn’t that the core libraries were broken…. maybe my payload was dodgy. It did have newlines in it, but the object would handle that for me, right?

In retrospect I should have read the Javadoc ;-)

`

With Version 0 cookies, values should not contain white space, brackets, parentheses, equals signs, commas,double quotes, slashes, question marks, at signs, colons, and semicolons. Empty values may not behave the same way on all browsers.

`

In the end I just needed to do a myPayload.replace('n', ' '); to kill off the offending newline (which I guess just gets passed verbatim to Set-Header). I must be using v1 cookies, since it didn’t seem to mind about the space.

Anyways… a learning experience.

[Read More]

Hacking my first JFace Preferences code

I’m up to the stage in my PasswordSafe port where I need to add an options dialog. In the original app it’s a five-tabbed dialog with quite a few options, so I thought I might have a crack at using JFace Preferences. Wow!

Thanks to some great help from this example I was up and running in no time. SWT Designer supports a wizard for whipping up the GUI of a Preferences Page, so I could hack the example to add just the controls I need to support.

JFace Preferences Example

This is one very cool API. It makes it easy to do the common things that you want to do (ie. read settings, reset settings to defaults, and update your users’ persistent settings). Big tick to the Eclipse guys! The more I use JFace the more I love it. It’s just got this “real worldiness” about it that makes developing very productive.

This options dialog is the only area of the port so far where I’ve deviated from a complete emulation of the original, but JFace Preferences are just too convenient to pass up (and they look just great). The code ends up being very clean as each page is its own class and is just responsible for those few settings that relate to it. Good stuff.

[Read More]

SWT is good, JFace is great, RCP looks flippin awesome!

When I started PasswordSafeSWT, it was a pure SWT app, created almost entirely using SWT Designer. The productivity of that GUI tool is awesome. But the code lacked a little maintainability with all those anonymous event handlers (as easy as they were to edit graphically), so it was time to clean things up.

For my next step, I moved things over to JFace to take advantage of an “Action-style” app. Like in Swing, JFace gives you an action model where you can associate accellerators, icons and logic using a command pattern, and then attached your newly created actions to toolbars and menus.

Because SWT Designer also supports JFace, it was a snack to rearchitect. I now have a dozen self-describing commands, and a very lean main program - all looking much more maintainable. Plus I get status bar management out of the box which was a nice touch.

I’ve also taken advantage of the ListViewer and TreeViewer objects to do the MVC over the main db. Geez I love those controls. The way they’ve designed them is so pragmatic. I can just pass in my real datamodel and let them do the adapting for me. I could never really grok the complexities of the Model/Adaptor stuff that Swing provided, but the Viewer stuff in SWT was a snack.

Once my JFace app was happily running, I started to think about using a Help system. Javahelp would be an obvious choice, but for that fact that my app looks so native now I didn’t want to spoil it. I thought it might be nice to try and use the Eclipse help system somehow. More googling.

Then I came across the Eclipse RCP. And it looks absolutely awesome. There were some great tutorial links off Martin Perez’s blog and a great 3 part introduction off the articles section of RCP site and now I’m very keen to see some more. Since I’m already using the jars for JFace/SWT/OSGI for my standalone app, I’m keen to see how much work it would be to make the jump to a whole RCP app - and then add a pinch of Eclipse help to the equation. I suspect it may be a bit of work, and I’ll get a Jface version out the door before making the investment in anything more grand, but I’m definitely keen to explore more.

[Read More]

My Mac Mini has arrived! (and my PasswordSafeSWT app looks just fine!)

My Mac Mini has arrived and I’m loving every second of. For my first tinker I installed Eclipse (and Tiger since it wasn’t pre-installed but did ship on a CD in the box). You just can’t believe how small the mini is till you see it freeing up acres of your desk. My first take is “Boy this OS has got some eye candy!”. That dashboard stuff is very swish!

For my next trick I ran my ongoing port of PasswordSafe to see what an SWT app looks like running on a Mac. I guess I shouldn’t have been surprised, but it looks just great - totally native and very gratifying (but for the app name on the finder menu which appears to be a full classname rather than the window title). Here’s the grab:

Mac Main Window

I notice that I’ve still got some work to do on the Edit dialog. I’m using FormLayout so everything is pretty relative, but I’ve still got the odd percentage in there somewhere, as you can see from the dodgy buttons in the grab below. May simply be a matter of making the initial size of the dialog a little bigger. Need to do some experimenting.

Mac Edit Dialog

For reference, I’m running the 1.25 Mini with 512Mb of RAM and using Airport to connect to my DLink wireless router. Works just great - and even on 512Mb of RAM, Eclipse initially seems to be running along just fine. Don’t want to comment any more till I’ve used it in anger for a while to guage just how quick it goes.

Loving that Mac visual goodness, though…

[Read More]

Mockrunner saves my backside again...

I’ve blogged before about my love for MockRunner, and it just saved my backside once again… this time from JMS grief.

We were debugging some tricky thread sync problems related to JMS, and trying to setup the MQ environment to even write the test was proving just too difficult. Then I was thinking… maybe we could just mock out the whole JMS infrastructure… and sure enough, the latest Mockrunner has JMS mock support!

I love the “one stop shop” nature of MockRunner. We’re using it to test our EJBs, our Struts actions, our Servlets, our Taglibs, and now, our JMS! The only bit we’re not using is the JDBC support. I’m not sure why it gets so little profile as a library. The docs are good, the examples are good, it’s easy to understand, it does what it says on the tin. I’ve also found it a much easier library to grok than the bigger profile stuff.

Anyways, it was a doddle to mock up some MQ queues, and then decorate our test with JUnitPerf to put everything under heavy load and try and generate some contentions (there must be more scientific ways to setup thread safety/contentions, but I haven’t read enough on it. Tips welcome).

Big tick to the MockRunner! Awesome stuff, guys!

[Read More]

Fun with SWT Tray Icons... it's setMinimized(false)

I’ve just finished the Tray Icon integration of my PasswordSafeSWT app, and almost all of it was a snack. Catch the minimize window event, hide the window, show the tray icon. Catch the defaultSelection on the tray icon, show the window, hide the tray.

The only thing that caught me out was when I double click on the tray icon and show the window, it’s still minimized. Really not such a good look. The Shell object supports a setMinimized() and setMaximized(), but nothing like a setRestored()? Normally the SWT method names are so good, you can just guess. But no cigar here.

After some help from one of the guys on the RSS Owl project via the (totally awesome) SWT Newsgroup, the bit of missing information I needed was the setMinimized() call takes a boolean arg that, if false, restores the window the way it was.

If you are looking for a way to restore an SWT Shell programatically, setMinimized(false) is your guy. I though I’d write it up here so I can google for it later ;-).

[Read More]

My iMac Mini is on the way...

Resistance was futile. I’ve finally ordered by iMac Mini and it should be arriving next week preinstalled with Tiger. It was time to replace an ailing Win2k box at home, and for $AUD1100, the time seemed right to take a look at Mac’s OS first hand.

Really looking forward to scoping out the Java support, and particularly taking some of my little SWT apps for a spin to see how things look and feel on a Mac. Apparently the Swing Look and Feel (done by Apple) is also very impressive.

I’ve ordered a pretty mimimum spec (512Mb / 40Gb / G4 1.25), since the main use for this box is Web surfing and email, and also as a “test everywhere” platform for my Java development work. But truth be told, I can’t wait to see the thing in action running some Java apps!

[Read More]

Progress on SWT Port of PasswordSafe

Things are going well on my little porting project of PasswordSafe to SWT. Here are some grabs of the screenshots so far running on Linux:

SWT on Linux Main Window

SWT on Linux Edit Dialog

As a point of comparison, here’s the original Win32 application that I’ve been trying to clone:

Windows Main Window

Windows Edit Dialog

First time I ran it on Linux, I found that the SWT Dialog object was completely blank. Turns out I wasn’t calling shell.layout() before calling shell.open(). Seems that the Win32 version is more forgiving.

The power of FormsLayout is just awesome. I started trying to do the edit dialog layout with a grid but quickly ended up with five billion composites to get all the alignment working. In the end, the edit dialog is a single formlayout (plus a single grid inside that little groupbox). Much simpler to manage.

Anyways, the open, save, copy/clear clipboard are all done. Next step is to get that add/edit dialog functioning. Found a neat little Java class for a cross platform browser launcher too, that works just great on Windows and Linux (and apparently Mac, too. But I haven’t tested there yet).

[Read More]

Two Support Experiences Worth Raving About...

Time to brag about two companies that I’ve been dealing with lately that have offered me exceptional support.

The first great experience was from the guys at DbVisualizer (one very cool database query tool with an astoundingly good Swing interface). For $99, this tools is really great value, and well worth the dollars. What has surprised me is that, even at the lower end of the $ spectrum, the support has also been absolutely outstanding.

I’ve been having problems with DB2 nicknames on a quite old verson of DB2. Each time I’ve emailed Minq I’ve had a response same day with updates and fixes that won’t “officially” be released till later in the year. No fobbing off, just genuine interest and concern with the problem - even though our version of DB2 is pretty ancient. These guys are quality - full stop.

My second great support experience has been with the guys at SWT Designer. I’ve sent a bunch of emails to support and all of them have been answered in a few hours (I don’t know when they sleep since I’m in GMT+10) with, again, a genuine interest in helping out. They’re also including a bunch of my recommendations in the next release of the product (which seems to be every few weeks). Again, awesome product, awesome service.

I’m interested whether this is just an “excellence” as a culture thing. If you put out a first class product, do you have a culture of “first class” that translates to the pride you take in your support operations too?

Interested in hearing any other recommendations from people that have had “first class” experiences dealing with a Java vendor. To qualify, they have to be “support experiences worth raving about”.

[Read More]

Learning the Art of GUI Design...

Like many of you, I spend the vast majority of my time working on backend code. Hacking infrastructure libraries, EJBs, web framework code and all the unit tests that live along side them.

One thing I don’t have, and have never really had, is any real sense of GUI design. Even in my VB days, I was the king of the FrankenGUI. But since getting so pumped about SWT (after reading the excellent The Definitive Guide to SWT and JFace) and then finding the most incredible GUI tool on the planet (SWT Designer) - I’ve come to realise I’m learning all the tech of GUI design without the softer “arty” design and usability skills.

To that end, I’ve bought a copy of GUI Bloopers by Jeff Johnson. Despite the terrible name, this book is actually designed for programmers without GUI skills to learn the basics of usable design. Don’t be turned off by the title, there is a gold mine of info in here, and I’m really excited about learning some basic design skills that can help sharpen my new GUI passion.

Anyone else got any good resources/ideas for learning the skills of a slick and usable GUI design?

[Read More]

Converting .ico files for use in SWT apps

So you’ve got yourself a snazzy .ico file that you’d like to use in your funky new SWT app. Next step is to find an app that lets you convert .ico files to .gif files (or .png or whatever) that will play with SWT.

To save you some time, if you’re a Windows user, let me point you to the freeware IrfanView which will let you batch convert a whole directory of ico files to gif, png, or whatever. It will also let you set the transparency colour and all that other goodness.

If you’re looking for some icons for your commercial apps, let me just point you to IconExperience and tell you that the money is so worth it. I bought the whole set and they come as .ico and .png (with a pdf catalog to browse). They are just awesome.

If you’re just after some funky window .ico file for free, check out that ones at Fooods Icons. The iCandy Junior set looks pretty darn funky.

[Read More]

SWT Designer is unbelievably good software!

If you develop SWT apps, or you wish you good develop non-sucking Java GUIs, then you have to have a look at

SWT Designer. This Eclipse plug-in is so good I just want to rave.

Some of the things I just want to rave about are:

  1. There are no magic “untouchable” sections of your codebase (ala my early JBuilder experiences where you had all these //DO NOT EDIT sections)
  2. Refactoring all still works - in fact the two-way code editing is first class. I added a setHeaderVisible() to my table viewer by hand in the source, and when I switch back to design view it had picked up the changes.3. No need to create any special “Designer” projects to use the tool. Open up your current hand-developed codebase, right click on the java file and select /Open With…/Designer. Just works. (That said, there are also wizards for common tasks, but I haven’t taken them for a spin yet).
  3. The GUI editor just rocks. I can drag and drop layouts and composites and controls - and the visual hierarchy of components really helps me understand how the underlying codebase hangs together. The Properties/Events tab is also very nicely implemented (including changing properties of your layout data). You can also right click on an object and select the event you want to handle - whatever works for you!
  4. No special jars to ship with your app - this baby just understands SWT apps. That means if you buy a copy, your buddies on the CVS who do this stuff by hand don’t need to - and you won’t stuff things for them.6. Performance is great. On my two year old Athlon box, this thing is a little slow to start, but after that I don’t notice it
  5. Comes with a “Preview” mode - so you can see your design “running” without the need to launch your app.
  6. JFace support is out of the box. I do most of my stuff in JFace these days to get that touchy-feely MVC goodness - and the support for JFace stuff is excellent. Select a TableViewer and then click on the ContentProvider? You get a list of classes in your project that implements the interface. Small stuff, but the stuff that screams “this was developed by people who know how to work smarter”.

I’ve only used it for two days but I’ve been wanting this tool for my entire Java life. In darker days I used to program Visual Basic for a living - and this tool is easily as good from a GUI point of view, and heaps better from a two-way coding perspective.

I’ve raved about SWT before, in particular how I think it is the great hope of the Java Desktop… but if you’ve given up on Java Desktop apps, it’s definitely time to have a second look. SWT/JFace plus SWT Designer is just a killer combination. It’s certainly not cheap at $USD249 - but I’m going to play with my eval copy for another 12 days, and I think by then I will probably be totally infected.

Kudos to the boys at Instantiations. First class product. Give it an eval - you’ll be pleasantly surprised.

[Read More]

Virus Scanning on Windows (Go F-Prot!)

Well, my McAfee license has expired and I’m in the market for a new Virus Scanner. This time I’m after something that won’t bring my machine to a grinding halt, but still has current signature goodness. Enter F-Prot.

These guys have been around forever - I remember their DOS software running on our PC Labs in undergrad circa ‘92 - but their current offerings are just great. You can get editions for Windows, Linux & BSD (the Unix variants are free for home use), and their Windows software is just $29 - with a liberal license that allows you to install it on up to 5 machines. How good is that?

Add to the mix that it was designed from the group up to be resource friendly (both in memory consuption and CPU) - and you’ve got yourself one sensational virus scanning option - that won’t strangle your PC while running.

I’ve been trialing it for the last couple of weeks, and it’s just great. I’m be happily registering when my trial expires, and installing on my two home PCs plus a notebook. Great stuff!

[Read More]

First Experiences with IBatis SQL Maps

I’ve been playing around with Perisistence frameworks lately, after been inspired by a Hibernate presento at our local JUG. After messing around with Hibernate config issues for ages, I decided to scout around for a lighter weight alternative for my little app and had my first experience with iBatis SQL Maps. All I can say is… Wow!

I’ve played around with Hibernate before, and it is power unlimited. But rather than getting lost in the Hibernate magic for a little lightweight app I’m working on, I thought I’d shoot for something a little less complicated. Enter SQL Maps…

What I love about this product is that:

  1. it’s only a coupla jars;2. it’s simple to see what is going on, and tune your SQL statements accordingly;3. your code gets all the semantic goodness/cleanness of an O/R solution; and4. there is very little magic.

Essentially, it’s a very lightweight persistence solution that gives you most of the semantics of an O/R Mapping toolkit, without all the drama.

The general gist is that you develop up a little bit of XML sauce to handle the actual query marshalling, ala:





Then you call the library with something like…

   List allMsgs = sqlMap.queryForList("getAllMessageDTO",null);

and get back a list of populated objects. Admittedly not quiet as elegant as Hibernate, as the list isn’t live, but cool none the less.

[Read More]

How To Speed Up PDF Reader on Windows

Ok. Not strickly Java-related, but since a lot of Java tools ship with PDF manuals, you need Adobe Reader. What’s been bugging me is how long Adobe Reader takes to start up (on Windows). It loads a stack of plugins that you probably won’t need for the majority of your work - and on my Thinkpad takes forever just to start up.

Well enter Adobe Speed Up - a neat little freeware utility that you can run once to disable all your excess plugins. It’s configurable, but the default options are great. I’ve tried it with Reader v6 & v7 and it works outstandingly. My Adobe reader now starts up in under a second.

Great tool. Just works. Recommended.

[Read More]

Findbugs Rocks.. and clone() can sure be tricky..

After watching a FindBugs session on JavaOne Online (2004), I am totally hooked. I’ve played with PMD and

CheckStyle before (and they are both very cool), but the neat thing about FindBugs is that it runs on your bytecode rather than your source - so it picks up a bunch of things the other tools don’t.

I have seen Findbugs before, and even downloaded it, but it didn’t seem as “slick” as the other options, so I didn’t really give it the time it deserved. After giving it a workout of our source tree, I’m totally impressed. This thing is definitely the goods - and the false positives are really very low.

One thing that it did flag wildly about were a few of my pojos that returned arrays. For example, stuff like:


    public Foo[] getFoos() {
        return foos;
    }

which looks pretty innocuous to me… but then you realise that foos (the array itself) is mutable, so your clients can do stuff like:

    foo[0] = new Foo("Do Evil", -1);

Eeek. Not so good. So I did some reading. So one simple fix might be to clone it:

`

public Foo[] getFoos() {

    return (Foo[]) foos.clone();

}
[Read More]

Fun with StatCVS

I first learned about StatCVS on a developerWorks, and it looked pretty darn cool. Basically it’s a tiny Java app that crunches CVS logs and produces a bunch of neat HTML reports. It produces stuff for your project as a whole, and by individual developer. You can see who works the most in what parts of the source tree, what time of day you do your most commits, what percentage of mods vs new classes are committed, and all sorts of cvs-related administrivia.

It certainly passes the “Just Works” test - I was up and running in under 5 minutes - and the graphs it produces are really quite cool. Interesting to know that my most prolific commits happen between 9-10 AM and 3-4 PM, and typically on a Thursday. Whatever that means. I also spend 40% of my time on maintance and 60% on new code, which means we must have added a stack of features in the last year!

The only thing lacking is a way to start a date range after the initial import of your project (since we migrated a stack of source from another version control system to CVS, all the stats are skewed for the guy who did the original commit).

Anyways, a very nifty utility to play with for a bit of fun.

[Read More]

Getting very native with JNIWrapper...

After much delay, I finally bought a copy of JNIWrapper, which is one very cool piece of software. Basically, it’s a set of libraries that gives you access to the Win32 libraries without the need of writing your own C wrapper classes for JNI.

And it’s not just for Win32 either - COM is supported out of the box! Run their nifty swing app, select the COM library you want to use (from the list they prepopulate from your registry!), set where you want it dump the Java wrapper classes, and boom. Java COM Factory wrappers, interfaces, and concrete classes are all there, ready to go - including all those dodgy Win32 BStr classes you need when calling COM. You can even tell your COM factories to instantiate ApartmentThreaded, Multithreaded and all that other Win32 goodness that really only David Chappell understands anyway.

Best of all, the documentation and tutorial examples are first class. By the end of my first session, I had created Java stubs for the COM object I was into, and made a few calls to see all was working as planned. Any that’s with pretty vanilla Win32 skills on my end.

If you’re not into COM, and need to call straight Win32 stuff, types are provided for all the standard Window enums, and you can roll your own if you have to. The exception handling is awesome, Win32 faults get converted to Java exceptions, getLastError() works, and it’s all memory-safe to boot.

They even ship with a “WinPack” library that puts a Java wrapper round a ton of common Win32 things you’re likely to want to do (like the Registry, Filesystem Watches, Window operations like transparency, Tray icons and all that nativey stuff). But if what you want is not in there already, it’s pretty trivial to call any Win32 routine if you know the signature.

If Win32 is not your bag, it ships with versions for Linux/Mac too! I am loving the power, and at $US120 for a bundle of both Win32 and Unix libraries, it’s an absolute steal - and we don’t have to mix up any C code in our project! Great work, guys!

[Read More]