Загрузить образ с сетевого диска?

Моя рабочая станция работает под управлением Windows, и мы разрабатываем приложения Java, которые работают в Windows. На этих рабочих столах 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();
        }
    }
}

person samwell    schedule 31.08.2012    source источник


Ответы (3)


Если вы столкнулись со значительной задержкой в ​​сети, вы можете отложить загрузку до экземпляра SwingWorker, как показано в этом примере.

Обратите внимание, что в примере используется ImageIO.read(), а не Toolkit#getImage(), который "может содержать устаревшую информацию, которая была загружена из файла после предыдущего вызова".

person trashgod    schedule 31.08.2012
comment
Я сделал это: Image image = ImageIO.read(new URL("//NetworkDrive/Folder/image.jpg")); и получил ошибку java.net.MalformedURLException: нет протокола: //NetworkDrive/Folder/image.jpg - person samwell; 01.09.2012
comment
Что не использовать new File(), как показано здесь? - person trashgod; 01.09.2012
comment
@chudapati09 попробуйте новый файл (\\\\networkdrive\\folder\\image.jpg) путь, который вы пытались использовать, не является допустимым URL-адресом, URL-адреса должны начинаться с идентификатора протокола. Я только что провел последнюю неделю, написав API изображений для чтения изображений с сетевых дисков таким образом, и это отлично работает. - person MadProgrammer; 01.09.2012

Я не думаю, что путь Samba/CIFS является допустимым URL-адресом или локальным файлом. Вместо этого взгляните на JCIFS.

person martijno    schedule 31.08.2012
comment
Интересно. На моей платформе общие ресурсы Samba/CIFS отображаются в точке монтирования с именем /Volumes/. На винде ничего подобного нет? - person trashgod; 01.09.2012
comment
Да, в Windows вы можете сопоставить общий ресурс с буквой диска, скажем, U:. Затем к файлам можно получить доступ из Java, используя new File("u:/filename.txt). Однако требуется взаимодействие с пользователем на уровне ОС (точно так же, как при установке в Unix). - person martijno; 01.09.2012
comment
Ах, это имеет смысл; JCIFS разрешит программный доступ к общему ресурсу. +1 и спасибо за объяснение. - person trashgod; 01.09.2012

У меня была такая же проблема, и я нашел это через Google. Я решил эту проблему, используя «file:\\\\» перед URL-адресом samba.

person Saurfang    schedule 29.11.2013