Reply – Re: OpenGL + OS X
Your Name
Subject
Message
or Cancel
In Reply To
Re: OpenGL + OS X
— by philjord philjord
Thomas,
You don't even need to bundle Java, just Java3D and Jogl.

But you have to disable the ext folder Java3D.

Which is done by putting this
-Djava.ext.dirs=.\none\
into the Java arguments, it's simple and it works every time.

However the catch it you can't use any other extension like Java Media Framework.

Though I've never met a Java app that didn't bundle the extension it wanted to use, so I feel that it's not a strong reason not to disable the ext folder.

If you MUST have ext enabled you can do the following if you trust your users a LOT.

public static boolean checkForInstalledJ3d()
        {
                // check for java3d installed
                String extProp = System.getProperties().getProperty("java.ext.dirs");
                if (extProp != null)
                {
                        ArrayList<File> preinstalledJ3dJars = new ArrayList<File>();
                        String[] paths = extProp.split(ps);
                        for (String path : paths)
                        {
                                File folder = new File(path);
                                if (folder.exists() && folder.isDirectory())
                                {
                                        File[] listOfFiles = folder.listFiles();
                                        for (int i = 0; i < listOfFiles.length; i++)
                                        {
                                                if (listOfFiles[i].isFile())
                                                {
                                                        if (listOfFiles[i].getName().indexOf("j3d") != -1 || listOfFiles[i].getName().indexOf("vecmath") != -1)
                                                        {
                                                                preinstalledJ3dJars.add(listOfFiles[i]);

                                                        }
                                                }
                                        }
                                }
                        }

                        if (preinstalledJ3dJars.size() > 0)
                        {
                                String mess = "There appears to be some pre installed Java3d files.";
                                mess += "\nThey need to be removed (moved or deleted), otherwise this application will almost certainly fail.";


//Possibly just for fun try and delete the file for them too!
                                for (File jf : preinstalledJ3dJars)
                                {
                                        mess += "\n" + jf.getPath();
                                }
                                System.out.println(mess);
                                int result = JOptionPane.showConfirmDialog(null, mess, "Pre installed Java3d detected, do you want to attempt deletion?", JOptionPane.YES_NO_OPTION,
                                                JOptionPane.WARNING_MESSAGE);
                                if (result == JOptionPane.YES_OPTION)
                                {
                                        boolean success = true;
                                        for (File jf : preinstalledJ3dJars)
                                        {
                                                boolean fileIsNotLocked = jf.renameTo(jf);

                                                System.out.println("jf " + jf + " " + fileIsNotLocked);
                                                success &= jf.delete();
                                        }
                                        JOptionPane.showMessageDialog(null, success ? "Success!" : "Failed, please remove manually and restart");
                                }
                                return true;
                        }

                }

                return false;
        }