【问题标题】:Load image from a network drive?从网络驱动器加载图像?
【发布时间】:2012-08-31 19:49:32
【问题描述】:

我的工作站正在运行 windows,我们开发在 windows 上运行的 Java 应用程序。在这些 Windows 桌面上,我们可以访问我们的共享网络驱动器。所以我需要从网络驱动器加载图像,但它不起作用。我做错了吗?

import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.ImageIcon;
import javax.swing.JOptionPane;

public class LoadImage {
    public static void main(String[] args) {
        try  {
            Image image = Toolkit.getDefaultToolkit().getImage("\\\\networkdive\\folderonnetwork\\image.jpg");  
            JOptionPane.showMessageDialog(null, "", "", JOptionPane.INFORMATION_MESSAGE, new ImageIcon(image));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

【问题讨论】:

    标签: java image swing imageicon


    【解决方案1】:

    如果您遇到严重的网络延迟,可以将加载推迟到SwingWorker 的实例,如example 所示。

    请注意,该示例使用ImageIO.read() 而不是Toolkit#getImage(),后者“可能仍包含在先前调用后从文件中加载的陈旧信息。”

    【讨论】:

    • 我这样做了:Image image = ImageIO.read(new URL("//NetworkDrive/Folder/image.jpg"));,我得到了错误,“java.net.MalformedURLException: no protocol: //NetworkDrive/Folder/image.jpg”
    • 什么不用new File(),如图here
    • @chudapati09 try new File("\\\\networkdrive\\folder\\image.jpg") 您尝试使用的路径不是有效的 URL,URL 应以协议标识符开头。上周我刚刚写了一个图片 API 来以这种方式从网络驱动器上读取图片,而且效果很好
    【解决方案2】:

    我不认为 Samba/CIFS 路径是有效的 URL 或本地文件。请查看JCIFS

    【讨论】:

    • 有趣。在我的平台上,Samba/CIFS 共享出现在名为/Volumes/ 的挂载点下。 Windows上没有类似的东西吗?
    • 是的,在 Windows 上,您可以将共享映射到驱动器号,例如 U:。然后可以使用new File("u:/filename.txt) 从Java 访问文件。不过需要操作系统级别的用户交互(就像在 Unix 上挂载一样)。
    • 啊,有道理; JCIFS 将允许对共享进行编程访问。 +1 并感谢您的解释。
    【解决方案3】:

    我遇到了同样的问题,并通过谷歌找到了这个。我通过在 samba url 前面使用“file:\\\\”解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 2018-11-14
      • 2021-08-17
      相关资源
      最近更新 更多