Java game development

Java had the potential to be a very good platform for game development.

A garbage collected language significantly cuts down development time. The editing and refactoring tools are fantastic. Compilation is lighting fast. Debugging is easy. There are solid OpenGL and OpenAL bindings available. Runtime performance is fine.

Java runs on many platforms and it is not at all a bad choice for any of them. But it is not the right choice for any, either.

None of the major platforms now comes with a JRE preinstalled. The Windows installer is a mess, the future of the Mac implementation is uncertain. Java is not available to developers on any of the console platforms and the only mobile platform that sort of supports Java programming is Android.

There is no standard way of making a Mac app bundle out of a Java program. There is no standard way of making a Windows installer or executable out of a Java program. You have to do everything by yourself. Write Ant build scripts, make NSIS installers, EXE launchers, Mac app bundles, program icons. There is NO official support for this.

Here is a list of things I think could help:

  • Get rid of jusched.exe. Use the standard Windows scheduling service like everyone else. Even Google eventually got that right with their update service.
  • Get rid of tray icon.
  • Allow custom JREs to be bundled with software products. The current license doesn’t allow me to go into rt.jar and remove the 90% of stuff my games don’t use. A 50MB game is inflated by 100% by the standard Java libraries.
  • Add a standard way to make an EXE file / Mac bundle / Linux binary that launches a Java program. CMD/BAT/SH files look amateurish and cannot have icons.
  • Make it super easy to create an embedded version of the JRE, cut down to just the stuff the program uses, ready to go. In fact, embedding the VM and the libraries and the Java program itself all in a single EXE file automatically would be the best way to do this.
  • Make Swing use native controls for everything. Or switch to SWT and get behind it 100%.
  • Get rid of the stupid mascot creature and pretend it never existed.
  • Remove Java Sound. It is a bunch of complex unusable interfaces written by architecture astronauts. Nobody uses it.
  • Use a sane versioning scheme. Java 6.0.21. Oh, and, you know, stick to it from then on.
  • Open up the new self-updating mechanism so that any Java program can use it to update itself from its developer’s site.
  • Make it easy to retrieve the proper location of users’ home directories. Documents, Pictures, App Data, stuff like that.
  • Merge server and client JVMs into one. It is confusing.