I've written a Java database program using Swing, and it looks and works fine on my Windows machine. I was expecting to be able to transfer it to my Linux (CentOS 6) machine with no problems, and while it compiles and runs just fine, the GUI is blank.
Specifically, a JDialog that I show appears as a solid grey rectangle, but I can still see my cursor change to an I bar when I hover over the text boxes, and I can type into them and press the invisible Ok button, and it works. (This is a database login dialog.)
Then, a JFrame that I've setup as an MDI parent is displayed, but it has zero size. If I drag it open it does have a border, but it does not visibly have the menu that I placed on it. I don't seem to be able to access the menu invisibly as I was able to on the JDialog.
I suspect that this must have something to do with some Java or library version, but I'm not sure. I tried installing Java 7 but it didn't change anything. I'm not sure if I should uninstall Java completely and try reinstalling it, or if maybe it has something to do with the project instead (I am using Eclipse Kepler if that helps.)
I see a few other "Java program is blank" questions, but they either do not have answers or are not the same issue I am having. (My program is only blank under CentOS so far; it works and looks just fine under Windows.)
I narrowed it down to a single line. In the JDialog I had the following:
setType(Type.POPUP);
as soon as I removed this line, the dialog became visible.
Additionally, I find that if I use the Test/Preview... feature (this is using the WindowBuilder) when that line is present, it shows the dialog blank, but it is non-interactive and effectively hangs Eclipse. This led me to "end-task" java.exe, which did unfreeze Eclipse, but it ended up causing even more problems, including the ones I was having with my MDI JFrame.
After rebooting, and removing the above POPUP line, everything is working great.
Related
This question already has an answer here:
addKeylistener() not working
(1 answer)
Closed last month.
I am making an RPG game in Java using my Swing-based engine, and everything works on my FreeBSD as well on Linux, but on Windows it seems like the keyboard handler is broken. I have no idea why it happens, the same JAR file works good on Linux/BSD.
I have no source why does this not work as no error popups in the console and everything runs as expected except for the key input.
The game is too large to provide source scraps here (I have no idea what is wrong), but it is on my git: http://codeberg.org/glowiak/gnengine
Package com.glowiak.gnengine contains the engine, com.glowiak.myrpg contains the game and that's all worth noting.
I tried switching JREs but nothing did fix it, on Linux OpenJDK ran it fine, on Windows it did not.
On windows, if you click the game window, then press the Tab key, the controls then work. This is because when you press the the Tab key, you are setting the focus onto your JPanel, which is required for a Key Listener to work properly in java swing. For more details, see this answer by hovercraft full of eels.
My recommendation would be to follow the advice of that answer, and instead of using KeyListeners use KeyBindings.
I am using Java 14. Funny thing is that it used to work. Replaced the hard drive and upgraded the BIOS to no avail. I tried doing the same thing on my laptop and it doesn't work there either. It looks like it has something to do with Netbeans. My fellow Software Engineer doesn't have the problem.
The first screen image has the "Print This Order" button. The second screen image is what the program displays when run. There is no "Print This Order" button.
I was not creating the button correctly. I had to copy and paste a working button and rename it.
I installed Eclipse IDE for Enterprise Java Developers 2020-09 with WindowBuilder 1.9.4. Then I tried to create a test application: SWT/JFace Java Project with a JFace ApplicationWindow.
My problem is that I cannot drop anything on the window directly in design mode. It is possible to add widgets to the main container in the components tree. But they seem to be hidden behind the parent shell (I could see this from setting a background color for it and when I add them I can see their bounds, but then no longer). It is not possible to resize the application window in design mode either.
However, when I do "Test/Preview...", the widgets are there. And also when I run the program, as they should as they are in the code. In the latter case also the resizing works (not with "Test/Preview..."). The resizing seems to work at first, but then it snaps back to a minimal size where only the menu and toolbar fit in the window,
This is so with any such project. I first tried to import a program I had written in an older version of Eclipse. There I have tabs in a composite in the container. They seem to be hidden, too (and misplaced, also behind the toolbar). But when I run the program, everything is fine. I first thought I might have messed something up in the program, so parsing gets sidetracked. But that cannot be it as the problem already arises in the simple test program where I have just one widget and the default code.
I have tried quite a few things to get around this, eg. reinstalled the IDE, installed an older version, installed an older version of WindowsBuilder in case this is a bug in either. But to no avail. Has anyone experienced the same problem? Seems like there is a simple mistake on my part. Something I would have to change in the settings or maybe the program?
But I have no idea where to look. Could it have to do with the JRE (OpenJDK15U-jdk_x64_windows_hotspot_15_36)? Had to take that as the download from Oracle does not work for some reason. There is a warning that it is not exactly compatible. But then the program works fine, so it cannot be at such a basic level? Any ideas very much appreciated as I am totally stuck at this point.
There is no problem with designing eg. a JFace dialog. Everything works as expected, I can drop widgets, resize, etc.
Here is how it looks:
Brute force "workaround": I go back to Oxygen where things are working fine. But somewhat of a defeat because I am stuck with an old version, which is a deadend. IIRC already going to Photon posed insurmountable problems for me (certainly my fault as I am not that good at the nitty-gritty). Would still be very interested in an answer to my question. Urgency is now lower as I can at least keep working on my program and let my frustration die down after two days of futile attempts.
[Edit: I only tried the resizing in Oxygen 32-bit, that worked, but did not check whether the problem with dropping a widget on the application window was also there. Then I tried to get the 64-bit version to run, which I could not do. There is apparently a problem with Java > 8. Installation of Photon worked finally. However, while resizing is okay there, I get the same problem with dropping widgets and that they appear to be misplaced (upper left corner of the area seems to be behind the toolbar. The "workaround" unfortunately went nowhere. So I am again more interested in an answer than I thought.]
[Edit 2 as per Oct 12: Since I could not solve this problem, I decided to redo the GUI with a SWT Application window. That lacks some of the functionality of a JFace Application window (I especially miss the ease of Actions). So it seems like a step backwards, and it caused some extra effort. But then the upside is that I had to rethink a few things about the structure anyway, which means I was forced to do that sooner than later. But still would like to get also JFace Application windows to run. Pressure is no longer there, but out of interest what went wrong.]
Not sure if this is the correct place to ask. If there's a better SE site for that please let me know.
Ever since I've started using SceneBuilder it's sub-menus are completely unusable, as they disappear as soon as I move the cursor to select an option.
For example - say I want to change the font size for a label. I click on the "Font" property, which opens the family, size and style properties. Now I click on the size, which opens a drop-down list of sizes, but as soon as I move the cursor to a value the drop-down list disappears! It's as if SceneBuilder thinks I've given up on selecting a value, so it should hide the drop-down again.
The exact same thing happens, for example, when trying to change properties of effects, and anywhere there is a drop-down not in the main window.
I am using the latest (8.0.0) SceneBuilder from Gluon, although the exact same thing happened on Oracle's 2.0 (which is older and not maintained, as far as I could tell). I'm on Linux Debian 64bit, Java version 1.8.0_u40.
Any hint as to why this is happening, and how to solve it?
Normally SceneBuilder does not show such a behavior. I can only imagine that this behavior is triggered by some Linux Java bug. My suggestion would be to switch to Windows or Mac (probably not an option for you :-)) or at least use a more recent version of Java in the hope that this bug has been fixed in the meantime.
Hey so I have a Java application where I use a JFrame as the main window. My problem is when I pin the executable to the taskbar and then run the executable a second icon is placed on the taskbar instead of a "glow" being placed on top of the icon that is already pinned. In other words, two icons on the taskbar when I pin and run the executable. Is there any coding solution to this problem?
Please even let me know if you think there is no way or if you have come across this before.
There could be multiple reasons for this:
Do you have more than one JFrame getting a task-bar icon? Referencing this question: how to restrict more than one java application icon on taskbar?
It could be that the pinned version is not the same as the one that actually runs, i.e. trying pinning the second icon that appears, then using that icon in the future.
You might need a setting in your configuration if you have any, Eclipse (the IDE) seems to suffer from this problem and requires the JVM tp be specified in it's ini file, referencing: How to make Eclipse behave well in the Windows 7 taskbar?
Last Resort. The IsHostApp setting in the registry can change the way java behaves on the task bar, you would still have two icons, they would just stack:
https://superuser.com/questions/465002/how-do-i-combine-multiple-java-buttons-into-a-pile-on-the-taskbar/465248#465248