栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

当前平台不支持桌面API

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

当前平台不支持桌面API

基本上,问题是Java桌面集成在Linux上无法很好地工作。

它旨在与Windows配合使用。某些东西可以在其他系统上运行,但是没有人真正关心为这些系统添加适当的支持。即使安装了必需的“ gnome库”,结果也将很差。

前段时间我遇到了同样的问题,并提出了以下课程。

通过使用 特定系统的命令 可以实现该目标:

KDE:     kde-openGNOME:   gnome-openAny X-server system: xdg-openMAC:     openWindows: explorer

如果这些都不起作用,它将尝试Java Desktop提供的实现。
由于此操作通常会失败,因此将其作为最后的尝试。


DesktopApi类

此类提供静态方法

open
browse
edit

经过测试,可以在Linux(Kde和Gnome),Windows和Mac上运行。

如果您使用它,请给我信誉。

package net.mightypork.rpack.utils;import java.awt.Desktop;import java.io.File;import java.io.IOException;import java.net.URI;import java.util.ArrayList;import java.util.List;public class DesktopApi {    public static boolean browse(URI uri) {        if (openSystemSpecific(uri.toString())) return true;        if (browseDESKTOP(uri)) return true;        return false;    }    public static boolean open(File file) {        if (openSystemSpecific(file.getPath())) return true;        if (openDESKTOP(file)) return true;        return false;    }    public static boolean edit(File file) {        // you can try something like        // runCommand("gimp", "%s", file.getPath())        // based on user preferences.        if (openSystemSpecific(file.getPath())) return true;        if (editDESKTOP(file)) return true;        return false;    }    private static boolean openSystemSpecific(String what) {        EnumOS os = getOs();        if (os.isLinux()) { if (runCommand("kde-open", "%s", what)) return true; if (runCommand("gnome-open", "%s", what)) return true; if (runCommand("xdg-open", "%s", what)) return true;        }        if (os.isMac()) { if (runCommand("open", "%s", what)) return true;        }        if (os.isWindows()) { if (runCommand("explorer", "%s", what)) return true;        }        return false;    }    private static boolean browseDESKTOP(URI uri) {        logOut("Trying to use Desktop.getDesktop().browse() with " + uri.toString());        try { if (!Desktop.isDesktopSupported()) {     logErr("Platform is not supported.");     return false; } if (!Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {     logErr("BROWSE is not supported.");     return false; } Desktop.getDesktop().browse(uri); return true;        } catch (Throwable t) { logErr("Error using desktop browse.", t); return false;        }    }    private static boolean openDESKTOP(File file) {        logOut("Trying to use Desktop.getDesktop().open() with " + file.toString());        try { if (!Desktop.isDesktopSupported()) {     logErr("Platform is not supported.");     return false; } if (!Desktop.getDesktop().isSupported(Desktop.Action.OPEN)) {     logErr("OPEN is not supported.");     return false; } Desktop.getDesktop().open(file); return true;        } catch (Throwable t) { logErr("Error using desktop open.", t); return false;        }    }    private static boolean editDESKTOP(File file) {        logOut("Trying to use Desktop.getDesktop().edit() with " + file);        try { if (!Desktop.isDesktopSupported()) {     logErr("Platform is not supported.");     return false; } if (!Desktop.getDesktop().isSupported(Desktop.Action.EDIT)) {     logErr("EDIT is not supported.");     return false; } Desktop.getDesktop().edit(file); return true;        } catch (Throwable t) { logErr("Error using desktop edit.", t); return false;        }    }    private static boolean runCommand(String command, String args, String file) {        logOut("Trying to exec:n   cmd = " + command + "n   args = " + args + "n   %s = " + file);        String[] parts = prepareCommand(command, args, file);        try { Process p = Runtime.getRuntime().exec(parts); if (p == null) return false; try {     int retval = p.exitValue();     if (retval == 0) {         logErr("Process ended immediately.");         return false;     } else {         logErr("Process crashed.");         return false;     } } catch (IllegalThreadStateException itse) {     logErr("Process is running.");     return true; }        } catch (IOException e) { logErr("Error running command.", e); return false;        }    }    private static String[] prepareCommand(String command, String args, String file) {        List<String> parts = new ArrayList<String>();        parts.add(command);        if (args != null) { for (String s : args.split(" ")) {     s = String.format(s, file); // put in the filename thing     parts.add(s.trim()); }        }        return parts.toArray(new String[parts.size()]);    }    private static void logErr(String msg, Throwable t) {        System.err.println(msg);        t.printStackTrace();    }    private static void logErr(String msg) {        System.err.println(msg);    }    private static void logOut(String msg) {        System.out.println(msg);    }    public static enum EnumOS {        linux, macos, solaris, unknown, windows;        public boolean isLinux() { return this == linux || this == solaris;        }        public boolean isMac() { return this == macos;        }        public boolean isWindows() { return this == windows;        }    }    public static EnumOS getOs() {        String s = System.getProperty("os.name").toLowerCase();        if (s.contains("win")) { return EnumOS.windows;        }        if (s.contains("mac")) { return EnumOS.macos;        }        if (s.contains("solaris")) { return EnumOS.solaris;        }        if (s.contains("sunos")) { return EnumOS.solaris;        }        if (s.contains("linux")) { return EnumOS.linux;        }        if (s.contains("unix")) { return EnumOS.linux;        } else { return EnumOS.unknown;        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/469589.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号