BitMaster_1980: Java never claimed to be seriously good at UI. AWT was just a mess because it was designed in a rush before the initial release and Swing, while fixing a lot of problems was in a lot of ways over-engineered while also falling short of a lot of things.
I was more aiming for the cross platform bit. It's not exactly true, right now. C code can be cross platform if you write it in a cross platform way, and supposedly Java was to make it so you wouldn't have to write something in a cross platform way, but then that went into the dumpster.
There was never a decent support for things that could help game development though. There were some third-party librabries (like LWJGL) but that still depended on native code and some drivers had/have shoddy OpenGL support, especially on Windows. Modularization took ages (if it works now, I haven't checked that in years) and getting a game somewhere without having to install a whole Java runtime environment was at best a chore and somtimes a ToU-violation.
Minecraft has been successful with it for a while, so it looks to have improved.
Java had a lot of chances but Sun was run by decent engineers who ended up being in over their head, especially on the economical side, and Oracle was just interested in suing people and trying to be as much as an ass as they could.
Well, the goals were a problem. I think one of the bigger mistakes of the java engineers was this mentality of making a language that could somehow protect the coder from themselves, and what it ended up doing is creating alot of boilerplate code for things that were previously simpler (but "dangerous" like pointers). Now days students are trying to break "the annoying things' like excessive exception handling requirements (why couldn't java just provide a default handler which simply required a UI specification to deliver that output in the event that it's not handled?).
Chromium (or something like Positron if it ever makes a comeback) works on pretty much everything that is nowadays even remotely relevant in that context. You even avoid shoddy GL-implementations because on Windows all browsers I know of transparently go through Angle instead.
I haven't spent much time there but I could, with trivial effort, build a fully packaged app for both Windows and Linux while still being able to run it as a webpage from the same source. More platforms were just additional entries in an array away. Admittedly, there are a few years difference between the two, but that's much more with much less effort than I could ever get in Java.
And that's where java failed. I have my own issues with JS constantly updating, and given that the people behind Chromium are trying to mess with C++'s unofficial binary compatibility standard is worrysome, though i'm more worried about the future of C++ with deprecation of language features.
I always thought that C++ was just C with classes and that if a new standard needed to be developed, someone would just make a new language on top of, or based on, C++. Now we have C++ joining in the laundry list of languages that are trying to protect the coders from themselves. Not only does this potentially mean constant refactoring, but potentially also include a need for entire algorithmic changes as well just to meet language changes. As a result, despite C++ being my first language, i've more or less abandoned it for C, beause at least ISO's promising not to mess with it too much (we'll see).
You use an established engine (like Unity or Unreal), but that also comes with its own problems and caveats and lots and lots of bundled stuff you probably never need. Alternatively, you can roll your own but that requires someone with a lot of skill and knowledge working on an indie project with no guarantee of any (monetary) success while you could draw an extremely decent salary working just about anywhere in IT. Not impossible (see for example the Factorio team), but not every indie team will be able to pull that off.
I don't think it is as bad as it sounds. A huge problem, though, is that people don't learn about or from the technology that they're using. Information hiding isn't bad for getting a good start, but i think should ultimately learn what's running under the hood. Sometimes you can either roll your own more effectively or even improve your algorithms to better take advantage of what's going on. If we had this mentality, building your own engines wouldn't be so spookey. Alot of these games aren't using many of the features provided by these engines and it is a massive waste. I think these engines should also consider that as well and improve runtime distributions based on that (What's odd to me is that only RPG maker managed to come up with this RTP thing, out of the game engines).
Running something in a browser and then bundling it via Electron or NW.js is a decent alternative. Chromium is not exactly lightweight but with a bit of extra work you can prune it down a bit and unlike the game creation toolkits you have pretty much complete freedom in how to build things.
Not lightweight is certainly the case.
Nothing is forever, nothing is perfect and things evolve. It's important to pick the right tool for the job. If you are doing something UI-heavy or a cute little action game with a limited team, taking a look at the HTML5 eco system is certainly worth a look at the time being.
This is how we end up, though, with simple platformers with near no features using half the system resources, though. Take the free game here: it's slowdowns are running competitively with some of the unity games i'm trying out on my system. I mean, yeah, it's old, but that's a bit of weight to be putting on a new system, too. The way it looks to me is that the scopes of the games are getting a little large for what they're trying to shove the games into. It's very clear to me that the issue I'm having with this free game is a result of the number of objects that get loaded into one space and then my CPU having to account for all that at once, and, to make things clear, I can play Skyrim on this computer with a reasonable FPS.
And, the weird thing is, i thought this was the whole point of independent APIs and libraries. This is what object orientation was eventually supposed to result in. Yet, for some reason, I can't just import a gravity library, collision library, etc, and just code a game in C++. We don't seem to have the things we thought we would have with certain advancements. I can think of a number of ways you could create a system to pass an arbitrary object to a gravity library that doesn't care about 2d vs 3d, for example. Collusion is a bit more complicated (but we'd expect different collision libraries for different types), but i think ti could be done. Yet none of this ever happened. Certainly we did end up with SDL, so there was certainly some progress by society.