posted on: 2010-04-12 14:24:20
How to get around java.lang.IllegalArgumentException: adding a container to a container on a different GraphicsDevice

>I have found a way to get around a

java.lang.IllegalArgumentException: adding a container to a container on a different GraphicsDevice

The problem is caused by using a SimpleUniverse to generate a GraphicsConfiguration.


import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Frame;

/**
  * Gets the best graphics conifguration to display on the current device.
  * 
  * @param frame frame that you want to add a Canvas3d to
  */
public static GraphicsConfiguration getBestConfigurationOnSameDevice(Frame frame){
            
  GraphicsConfiguration gc = frame.getGraphicsConfiguration();
  GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
  GraphicsDevice[] gs = ge.getScreenDevices();
  GraphicsConfiguration good = null;

  GraphicsConfigTemplate3D gct = new GraphicsConfigTemplate3D();

  for(GraphicsDevice gd: gs){

    if(gd==gc.getDevice()){
      good = gct.getBestConfiguration(gd.getConfigurations());
      if(good!=null)
        break;
    }
  }



  return good;
}





Comments

jaume
2011-03-11 04:00:38
Nice! I just copied and pasted and it fixed my error. I'm in Ubuntu + dual screen + NVidia drivers. When I create the View in my left screen (main monitor) it worked fine and I can move it to the second screen. However, it was not possible to create the window directly in the second. Now, it is possible. I notice that the performance is lower, though: less frame rate, antialiasing seems to be broken and so. Do you have an explanation for this? Anyway, thank you very much. You already solved a very annoying issue I had.
Matt
2011-03-12 10:24:54
I really don't know. I suspect that the device being used is different, you could try returning returning a different configuration then the getBestConfiguration. Also there are the java3d forums, which seem pretty active and somebody is likely to answer your question.
Name: