But it seems that right now we are weaker than other engines I've made a VERY thorough study. I visited all the sites (800+ of them) that are mentioned here on JGo by users. Half of them dead. Only some tiny amount makes me really interested. I've looked through the showcase (though most games I have seen on sites). I've seen the featured section. So I would say I was pretty much aware about 90% of everything in games written in java. (The only thing I haven't already done is looking for ALL Java4k entries and all Ludum Dare entries (I did for the best)).ON THE CONTRARY: I've looked just through one single IGF 2012 entries. 550 games is not much. BUT. A considerable amount is REALLY AWESOME. 50-100 were very interesting, technically perfect, visually brilliant with a breath-taking atmosphere. People write games on Flash, Unity, Game Maker, Source, Unreal etc engines. They do it on C++ and C#. They do it for XBOX and Ipad. AND ONLY SELDOM they do it on Java. I have recognised very little amount of Java games on IGF (if any).

So, returning to the original question. Does really game development on Java suck? Why are we still here?

Those games might be breath taking, but look at them again. What made them so awesome? There is only 1 answer: gameplay and graphics. Since most of us are poor indie gamers, we don't have access to professional artists who can make our games as amazing.

Language has nothing to do with the outcome. Code is easy and cheap to make. Art is not

Java as a language is a poor fit for game development. It doesn't help that it is statically typed, which leads to a lot of boilerplate code, especially when you throw generics into the mix.

Java as a platform still suffers from the 'java is slow' mantra. It will probably never get rid of it. Even Minecraft suffers from it, as people keep wondering why Notch didn't code it in a 'real' language.

Java as a deployment tool is horrible. First applets were broken for over a decade, then webstart came along, turning out to be even worse. The only way to deploy reliably is to ship your own JVM. Android is surpringly the best deployment platform for java. It is too bad that the CPUs in mobile devices are slow and the interpreter makes performance even worse.

As a result of all of this, there is barely a toolchain for java game developement. This limits the productivity of developers coding a game in java, resulting in the majority being sub-par games.

Hi, appreciate more people! Σ ♥ = ¾Learn how to award medals... and work your way up the social rankings!

They are all specific platforms for creating interactive Media. (Apart from Flash, all are fully specialized on Gamecreation)Java is a general Language. In pure C/C++ approaches you will also find many sub-par games. But also many great ones.

Java sets limits wich C/C++ can overcome much easier. (The need for a fitting virtual Machine beeing the main point)Thus getting Javagames deployed has an inherent risk wich large studios would not take.On Android this is not a problem, as the VM is a fixed part of the package.

In then End, its just a typical set of small Projects mainly by Hobby Developers. Thus the quality cant be expected to reachthe level of prominent c/C++ games.

And Art-centered Projects are done/cooperated by Artists who will naturally prefer a Gameengine such as Unity.

When I told two fellow developers about writing a game in Java, first question from both was: "Really, is it fast enough ?"Before even getting into details like the kind of game or any other sort of details.That tells a lot. Myths do survive no matter what.

If Java hadn't been the language of choice for most business software I'm making a living from, I would've probably looked into C# or C++, although I think the latter is a horrible language.

It sucks that you can't do fancy graphic effects with Java2D for lighting for example. Even more when I see a framerate of 3000-4000 fps for the basic graphic rendering.

We have the year 2012 and there is still no usable HTML renderer component on board.

But you have to do a fair comparison.Comparing Java with the Unreal Engine is like apples and oranges. Same for Flash. Applets failed. Bundling Java failed.Apple has its very own magnetic attraction.Java Community Process.Early look & feels were ugly to the bone.Badly written applications built up the myth of slowness.Many reasons.

Lethal Running - a RPG about a deadly game show held in a futuristic dysoptian society.

Java as a language is a poor fit for game development. It doesn't help that it is statically typed, which leads to a lot of boilerplate code, especially when you throw generics into the mix.

All the other successful languages named are also statically typed. Certainly javascript/actionscript counts, given all the "casual games" using it, but the only other "dynamic" language I can think of that's seen a significant number of games targeting it is python, and the installed base for those games is dwarfed even by java.

I think applets were a boat anchor for a long time, and while I don't think webstart is worse, it's certainly half-assed. The toolchain for java is fine -- the feature set in the average java IDE is something C++ devs have to shell out hundreds to get if it's even available at all.

Finally there's the cultural aspects, such as the "java is slow" canard, java's association with "enterprisey" apps, and so on. One real concern many game devs have is the ease with which their games can be decompiled from bytecode.

Why are we still here? We like the java language I guess. In my case, I like the languages and libraries for the JVM like Scala and Akka, and hope someday to write a decent game with them instead of enterprisey apps (so count me as one of the "hangers on" rather than a game dev)

We have the year 2012 and there is still no usable HTML renderer component on board.

you missed javafx2

The maximal speed from c++ is higher than java but thats just useless in reality. Thats also true for assembler over c++ but nobody use assembler. The key point is productivity. The speed/functianality that you can get with limited time/ressource and there imho java win.

As a result of all of this, there is barely a toolchain for java game developement. This limits the productivity of developers coding a game in java, resulting in the majority being sub-par games.

I think the above hits the nail on the head. There is nothing wrong with the language itself and it has a solid tool chain for writing code however the tools aimed at creating games and client side distribution are indeed pretty weak.

What little game tools we do have, have been scrapped together by volunteers and the community in their free time and hence are of that quality.

Flash, Unity, Game Maker, Source, Unreal etc engines mentioned above all have dedicated companies behind them that are throwing serious resources at pushing those platforms forward, i'm pretty sure if there was a similar company doing that for Java games, there would be no problem.

Can't really blame Sun/Oracle here as its is not really their domain or area of focus. Surprisingly though they wasted a ton of resources on the dead end that is JavaFX, which if had been aimed at pure Java and game development would have gone a long way.

I support Android, J2ME/BlackBerry, J2SE, HTML5, and could support Native and Flash.

So the code base is almost always really Assembly and C/C++ while using Java anyways.

In short your full of it if you think UDK/Unity can run on early Android, or many PCs without a good video card.They can't run on 1 billion J2ME devices either.I actually have more points, but I don't need more.

Creating games for android is really good ecxuse to stick with Java. Now that libGDX support webgl that gives really slick way to create web games and applet is allways fallback possibility if webgl is not avaible. Is there any better way support both these platforms with same code base?

First, Java isn't an "engine", it's a platform. You have engines (like Unreal, Torque, Ogre, etc) on top of the language/platform.

In terms of adoption among the indie dev community, you're right: C++ is by far number one, and Objective-C and C# are the second tier up and comers. There are a small number of Java games, but a few awesome ones: I love Wakfu and of course Minecraft is big.

The biggest problem with Java is the runtime support. Java only runs natively on Android and runs on workstation computers (Windows/Mac/Linux) with this JRE thing that end users can't stand. It doesn't run on consoles, it doesn't run on iOS smartphones/tablets, and it can't run on things like Google native client (NaCl). This is fixable: Either Oracle or one of the developers doing an alternate JVM should make a path for JVM apps to run on these popular platforms (and ideally make it easier to hide the JRE piece like with what Wakfu or IntelliJ do with emdedded JREs). On the C# side, Microsoft officially supports C# apps on Windows and on Xbox. But the Mono group really took things further and made paths for C# development on Mac, iOS, Android, Google NaCL, and PlayStation Vita. That's what game developers really want.

Why stick around? What is worth keeping about Java? Three big reasons: The tools. The flexibility. The community.

What other platform plays host to such a vibrant language community? Scala, Clojure, and Fantom are all on .NET as well, but only the Java community really treats them like first class citizens. Kotlin is also an awesome multi-VM language (JVM, LLVM, JavaScript). JetBrains tries to make IDEs for everything, but their Java IDE is the most embraced and the best. Where did Ant, Maven, and Gradle all spring from? Where is the Hadoop and big data community centralized on? What other platform has such amazing multiple IDEs?

There are a ton of reasons to stick with JVM, even for games. There are also big problems with C++, Objective C, and C#. As musch as I appreciate C++, it is in the dark ages in terms of language design (so is Obj-C). C# is completely under the thumb of Microsoft. If there is an open source tool that doesn't get full Microsoft support (like jQuery did where all the salaried evangelists recommend it and post tips about it, etc), it's not treated as a real option. With Java, everyone hates Oracle, but at least the community is open in the sense that libraries, languages, frameworks, and IDEs really sink or swim based on merit rather than the approval of some central company.

The old "Java is slow"... We all realize this isn't true based on benchmarks, but even the user perception isn't important. When users play Wakfu, there are no performance problems, they don't realize or care that it was written in Java, and that's how they like it (same with Bastion and C#). Users can't stand the normal JRE that constantly nags them about updates at inopportune times.

Also, Java the language is probably behind the times, but if you are the type who can appreciate advanced languages, Scala is ahead of the pack, and is typically a drop in replacement.

JavaFX 2, is awesome for traditional desktop business GUI apps, like Microsoft WPF, but I don't think it makes any sense for games at all.

The old "Java is slow"... We all realize this isn't true based on benchmarks, but even the user perception isn't important. When users play Wakfu, there are no performance problems, they don't realize or care that it was written in Java, and that's how they like it (same with Bastion and C#). Users can't stand the normal JRE that constantly nags them about updates at inopportune times.

Sadly, this is blatently false: there isn't a sharp divide between users and (aspiring) developers.The 'java is slow' mantra limits the inflow of users (AKA talent) in the java developer community.The 'nagging java update' annoys people to no end, also strengthening the uninformed 'java sucks' mentality, limiting the inflow of those 'users' to exploring the java platform.

Hi, appreciate more people! Σ ♥ = ¾Learn how to award medals... and work your way up the social rankings!

The old "Java is slow"... We all realize this isn't true based on benchmarks, but even the user perception isn't important. When users play Wakfu, there are no performance problems, they don't realize or care that it was written in Java, and that's how they like it (same with Bastion and C#). Users can't stand the normal JRE that constantly nags them about updates at inopportune times.

Sadly, this is blatently false: there isn't a sharp divide between users and (aspiring) developers.The 'java is slow' mantra limits the inflow of users (AKA talent) in the java developer community.The 'nagging java update' annoys people to no end, also strengthening the uninformed 'java sucks' mentality, limiting the inflow of those 'users' to exploring the java platform.

Alright, I'll agree that the perception is a definite issue among potential developers.

The nagging Java update and even requiring users to have a system level JRE installed is definitely a huge deal. That's very fixable though. There are solutions now, like embedding an IDE like Wakfu does, but there should be an even easier way to do that.

And it has been worse in my case, to have to have learn C and assembler because there's no way put java into a microchip (nanoVM also failed).

I remember 3 years ago in my university, nobody did give shit to java (except myself ofc). Then suddenly android became trend of smartphone, promising good future in software bussiness and development. Now everybody throws their visual studio and DLs eclipse like hell.

No Java on Playstation, XBox, or iOS. That's the long and the short of it.

Cas

How much do you give me to prove you wrong for XBox 360 and IOS using Avian?

guy, we are talking about publishing a game commercially like normal.of course you probably can (theoretically) port the jvm to a console as part of a homebrew project, with a hacked console - but nobody buys homebrew games for hacked consoles obviously

I'm wondering if one of the biggest issues with Java performance is the lack of real-time guarantees. It's not that Java is so much slower (if at all, if you are counting throughput), but that it is hard to deal with the timing irregularities that come from the variability in thread switching and garbage collection and the like. An article I was reading on "Real Time Audio" in Java brought up these challenges, and certainly they apply to fast, smooth frame rates for graphics as well as audio performance.

I think contests that emphasize "productivity" over "polish" contribute to the perception of Java. Where are contests that promote things like depth and atmosphere and originality? Instead we have "program it in 48 hours" or "program it in 4k". Maybe it makes sense to emphasize Java productivity strengths, if that is what its programmers are enthused by, and why they are here.

I'm here because I can build from scratch. Chances are a game engine isn't going to have all the parts or capabilities that I want to use. Java gives me the opportunity to do original work, and post it and have most Users run it.

guy, we are talking about publishing a game commercially like normal.of course you probably can (theoretically) port the jvm to a console as part of a homebrew project, with a hacked console - but nobody buys homebrew games for hacked consoles obviously

Many games are being shipped with the alternate .NET runtime Mono, why can't games ship with an alternate JVM runtime Avian?

I didn't realize Avian was that far along. Ideally they would get Google NaCl support or Playstation Vita support. I will need to check out their iOS pathway.

EDIT: While running samples from Avian's web page... I got Microsoft virus alerts (I never get these). Something about password stealer? Does anyone know about this?

I love the idea of generating Windows .exe files without relying on any other JRE.

No Java on Playstation, XBox, or iOS. That's the long and the short of it.

Cas

How much do you give me to prove you wrong for XBox 360 and IOS using Avian?

guy, we are talking about publishing a game commercially like normal.of course you probably can (theoretically) port the jvm to a console as part of a homebrew project, with a hacked console - but nobody buys homebrew games for hacked consoles obviously

When did porting Avian or the like become hacked console? It's just a set of code that you build on a machine it does not require that you hack anything.

Yes, there exist jitting JVMs that could theoretically be run on PS and XBox (not iOS). The main issue is that they are very slow compared to the desktop JVMs which are already about half the speed or so of C++, and these devices are extremely limited in power and have some very obscure architectural limits compared to the fairly straightforward design of desktop PCs meaning that these JVMs are even slower than they might otherwise be.

Regardless - the problem is that the entire toolchain, from a AAA studio's point of view, is missing. From one end - actual developers with game development skills who can do Java - through to the content pipeline integration - right to the deployment, there are simply massive hurdles at every step. Given that the actual coding development is maybe only 10% of the budget of a AAA title why the hell would they want to switch to Java to shave off 2-3 % points off that cost only to a) lose it all working around the totally novel experience of deploying Java on a console b) end up with a game that runs 1/10th the speed they need it to c) have to recode all their content pipeline stuff from scratch because none of it is compatible with a Java-centric world?

Java has made roads in indie development only because of three factors: firstly that the coding part of indie game development can easily account for 50% or more of a project's total cost and so shaving 20-30% off of that makes a significant impact on profit; secondly because the simultaneous release onto MacOS results in a 10-15% increase in profits as well; and thirdly because there is simply no realistic hope of most indies getting on to a console anyway without a world of pain which is probably the opposite to the experience they first envisaged.

Also I should mention JamVM if it hasn't already been mentioned - it is a complete implementation of the J2SE JVM spec, and the basis of the Dalvik VM on Android. It has JIT, but, again, misses out on 10 years of awesome Hotspot engineering that have made desktop Java as fast as it is today.

From a big studio's standpoint, what's the advantage? If I'm writing something from scratch, the time difference between programming in Java vs. C/C++ is virtually zero assuming I have equivalent libraries on both sides. But chances are few studios have a pool of competent java programers..so development speed would be slowed by a given teams learning curve of the language and tools. This would be a one time cost..but why would they bother? What's the long term advantage? Additionally you have the added memory footprint of the VM plus extra code space due to pointer bloat. Then you end up with a codebase that is trivially decompilable and runs nowhere near the speed that a C++ equivalent (no structures, temporal hints, parallel SIMD, etc.). Some of these issues could be dealt with via a custom VM..but what does that buy you other than additional costs (including time to develop/integrate)

If I wanted to advocate Java programming for games what I wouldn't try to do is go "head-to-head" with C++. Work with Java's strengths instead. Notably java is a dynamic language, so loading/unloading code chunks is easier (well not really, but I won't tell if you don't). So building a good ~100% uptime server with hot-deployment would be a reasonable feather-in-the-old-cap. Doing the same on client/standalone isn't as interesting as it would really just be a memory footprint reduction technique. Additionally using Java as an embedded scripting language would be reasonable. This is different that writing an entire game from a studio's standpoint since it would mean one/two bodies on engine/scripting language interface and the folks doing the scripting would be n00bs that aren't getting payed as much.

I suspect that - working from scratch, with a team of Java developers who also had game development experience - you'd probably realise a pretty significant productivity boost over C++. I also suspect you'd probably get, over several games, a continuous productivity boost through effective re-use, though I mostly base this on my own development practices. But unless you just happen to already have this team of Java game developers handy, you will already be aware of the small part that programming actually has in bigger budget games compared to everything else.

This is not to say that studios have not successfully done it: Jagex, Threerings, and even Popcap back in the day. And at the other end of the scale, little indie boutiques like Mojang (haha), Oddlabs, Puppygames, Swing Swing Submarine, etc. It's just not that common. But wrt. the OP's original rant... why should its general rareness in AAA development stop us using it to make games?

We don't really know what the overall failure rate. For java vs. C++ from independents I wouldn't be surprised if the numbers are similar and that the reason that C++ seems to generate more completed games is just due to the number of bodies making the attempt.

Hm I do not believe there is actually any such thing as "failure rate" in commercial development. In studio terms a failed project is usually one that is canned by a publisher, which will be for reasons independent of the programming environment - be it sudden budget catastrophe or management failure, I've never heard of a technical failure before, in either C++ or Java.

Having said that about 50% of our ideas never see the light of day. We get so far with them and then pull the plug because they turn out to be rubbish

java-gaming.org is not responsible for the content posted by its members, including references to external websites,
and other references that may or may not have a relation with our primarily
gaming and game production oriented community.
inquiries and complaints can be sent via email to the info‑account of the
company managing the website of java‑gaming.org