We have a multi-window Java application that is able to get itself into a state where it renders white screens. This application makes some external network connections and based on data that's sent over those connections updates the UI, and opens and closes various windows.
Naturally this only happens on the production machine, and only when nobody is around to investigate the problem as it is happening. The pattern that has been established via customer reports is that it will not happen for a couple weeks then will happen a few times frequently, eg 2x in 50mins. The customer has been killing the software and restarting the application when it starts showing white screens. We have caught it in action exactly once, and it resolved itself after about 20 minutes.
We have three windows that this has been confirmed to happen on. The only thing that these windows have in common is that a) they are triggered by data sent in over the network connection, and b) they are windows that are opened and closed constantly. One of these windows renders two JTextFields, the rest of the screen is blank (and the two fields that are rendered are drawn in the middle of the frame creation).
For case A, each window refreshes based on a different type of packet. In one case it is an entirely different socket that is sending the packets. There are three other windows (always open) that are responding to the same data and updating the UI, so we know the packet data is getting around.
Case B may leave more clues; it seems to hit a trigger where any windows opened after a certain point are rendered with a white screen. Windows that are already opened continue to update their displays but new windows are useless. We can't confirm this absolutely because the UI goes click-unresponsive; the only windows that can be opened are those that are triggered by the network data, and we can't close any windows either. (Interestingly enough, the customer has reported that there is one set of buttons on a working/rendered window that does work).
The CPU usage for the Java process spikes according to performance monitor logs and remains high as long as the white screens are appearing. Interestingly, the Task Manager does not reflect these numbers, reporting 5-10% CPU while the performance monitor reports >100% (dual core pc, max usage = 200%)
The heap is capped at 512MB. While displaying white screens, the memory usage as reported by task manager is 186MB, after it resolves itself this jumped to 271MB. Both numbers are what I would consider typical for this application.
The software was installed last year, and was working fine until several weeks after an update.
The software was compiled under JDK6 and is running on JRE 1.6.0_33.
The computer is a Windows 7 Professional x86 OS, dual monitors. I understand it has onboard video and there are generic drivers installed. I haven't been able to find OEM updates for these drivers (the monitors are Samsung E2220X)
All of our GUI updates are done on the event thread. All windows are shown and hidden on the event thread. Because the problem resolves itself (and the windows do not share objects) I do not think this is a deadlock.
I've added the Sun options for rendering control based on another thread I found on the internet, these options are -Dsun.java2d.d3d=false and -Dsun.java2d.noddraw=true. Disabling direct draw did not help, I disabled the Direct3D this afternoon and waiting to see if it helps.
Has anyone ever seen anything like this before, or have an inkling what might be going on?
Joined: Jun 09, 2003
just a guess, but you might try reducing the hardware acceleration of the errant pc's