Hi Can anyone help me in creating an X11 window in java swing using eclipse?And also the function to get the x11 id also.What are the basic requirement for creating an X11 window in java.
Creating an X11 window in Swing is as easy as new Frame()
followed by setVisible(true)
. Getting any of the unabstracted details will be harder. Of course, you can always open a java.net.Socket
to port 6000 or so and speak X11 yourself.
Tom answered the first part of your question. The second part of the answer is: to get the id of an X11 window you are going to have to use native code (code written in C or C++) and access it through the JNI interface.
You may have to run a search by title through all existing windows to get the one you desire.
Here is a recursive function that will search (starting from the root window) for a window with the desired name
Window windowWithName(Display *dpy, Window top, char *name)
{
Window *children, dummy;
unsigned int nchildren;
unsigned int i;
Window w = 0;
char *window_name;
if (XFetchName(dpy, top, &window_name) && !strcmp(window_name, name))
return (top);
if (!XQueryTree(dpy, top, &dummy, &dummy, &children, &nchildren))
return (0);
for (i = 0; i < nchildren; i++)
{
w = windowWithName(dpy, children[i], name);
if (w)
break;
}
if (children)
XFree((char *) children);
return (w);
}
Note: **unfortunately there is a well documented memory leak in the XFetchName function implemented in X11 that was never fixed. If you run valgrind and have minor memory leak issues this is whats causing them.
If you're using a Sun JVM and don't mind overriding package access using reflection and "setAccessible(true)", then you can create an X11 window using the Sun's toolkit. https://www.docjar.com/docs/api/sun/awt/X11/XWindow.html
Not all methods of the toolkit might be present, though: I suspect methods not used in the toolkit itself were removed. For example, most of the XlibUtil aren't there. Here's an example how to use reflection to access the toolkit methods, in Scala: http://gist.github.com/567076
You can also use JNA to code xlib parts in Java; see question: http://stackoverflow.com/questions/2391043/using-xlib-via-jna-to-move-a-window