6994933: java.awt.Desktop feature is "intermittently" supported on Solaris. Really unexpected behavior
Reviewed-by: art, dcherepanov
This commit is contained in:
parent
3073a78664
commit
0a926d8d57
jdk/src/solaris
@ -44,11 +44,27 @@ import java.awt.peer.DesktopPeer;
|
||||
public class XDesktopPeer implements DesktopPeer {
|
||||
|
||||
private static boolean nativeLibraryLoaded = false;
|
||||
static {
|
||||
nativeLibraryLoaded = init();
|
||||
private static boolean initExecuted = false;
|
||||
|
||||
private static void initWithLock(){
|
||||
XToolkit.awtLock();
|
||||
try {
|
||||
if (!initExecuted) {
|
||||
nativeLibraryLoaded = init();
|
||||
}
|
||||
} finally {
|
||||
initExecuted = true;
|
||||
XToolkit.awtUnlock();
|
||||
}
|
||||
}
|
||||
|
||||
//package-private
|
||||
XDesktopPeer(){
|
||||
initWithLock();
|
||||
}
|
||||
|
||||
static boolean isDesktopSupported() {
|
||||
initWithLock();
|
||||
return nativeLibraryLoaded;
|
||||
}
|
||||
|
||||
@ -83,12 +99,17 @@ public class XDesktopPeer implements DesktopPeer {
|
||||
}
|
||||
|
||||
private void launch(URI uri) throws IOException {
|
||||
if (!nativeLibraryLoaded) {
|
||||
throw new IOException("Failed to load native libraries.");
|
||||
}
|
||||
|
||||
byte[] uriByteArray = ( uri.toString() + '\0' ).getBytes();
|
||||
boolean result = gnome_url_show(uriByteArray);
|
||||
boolean result = false;
|
||||
XToolkit.awtLock();
|
||||
try {
|
||||
if (!nativeLibraryLoaded) {
|
||||
throw new IOException("Failed to load native libraries.");
|
||||
}
|
||||
result = gnome_url_show(uriByteArray);
|
||||
} finally {
|
||||
XToolkit.awtUnlock();
|
||||
}
|
||||
if (!result) {
|
||||
throw new IOException("Failed to show URI:" + uri);
|
||||
}
|
||||
|
@ -48,9 +48,15 @@ int init(){
|
||||
}
|
||||
dlerror(); /* Clear errors */
|
||||
gnome_vfs_init = (GNOME_VFS_INIT_TYPE*)dlsym(vfs_handle, "gnome_vfs_init");
|
||||
if (gnome_vfs_init == NULL){
|
||||
#ifdef INTERNAL_BUILD
|
||||
fprintf(stderr, "dlsym( gnome_vfs_init) returned NULL\n");
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
if ((errmsg = dlerror()) != NULL) {
|
||||
#ifdef INTERNAL_BUILD
|
||||
fprintf(stderr, "can not find symble gnome_vfs_init\n");
|
||||
fprintf(stderr, "can not find symbol gnome_vfs_init %s \n", errmsg);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user