Java: Как получить миниатюру из файла

В моем коде, я создаю набор объектов, к которым получат доступ различные потоки способом, который только безопасен, если объекты неизменны.

Не прямой ответ на Ваш вопрос, но имеют в виду, что возражает, что неизменны, как, автоматически гарантируют, не будут ориентированы на многопотоковое исполнение (печально). Код должен быть побочным эффектом, бесплатным быть ориентированным на многопотоковое исполнение, и это вполне немного более трудно.

предположим у Вас есть этот класс:

class Foo {
  final String x;
  final Integer y;
  ...

  public bar() {
    Singleton.getInstance().foolAround();
  }
}

Тогда foolAround() метод мог бы включать некоторые неориентированные на многопотоковое исполнение операции, которые аварийно завершат Ваше приложение. И не возможно протестировать на это отражение использования, поскольку фактическая ссылка может только быть найдена в теле метода, не в полях или представила интерфейс.

Кроме этого, другие корректны: можно просканировать для всех заявленных полей класса, проверить, являются ли каждые из них окончательными и также неизменный класс, и Вы сделаны. Я не думаю, что методы, являющиеся окончательным, являются требованием.

кроме того, быть осторожными относительно рекурсивной проверки зависимых полей для неизменности, Вы могли бы закончить с кругами:

class A {
  final B b; // might be immutable...
}

class B {
  final A a; // same so here.
}

Классы A и B совершенно неизменны (и возможно даже применимы посредством некоторых отражательных взломов), но наивный рекурсивный код войдет в бесконечный цикл, проверяющий A, тогда B, тогда снова, вперед к B...

можно зафиксировать это с 'замеченной' картой, которая запрещает циклы, или с некоторым действительно умным кодом, который решает, что классы неизменны, если все их dependees неизменны только в зависимости от себя, но это будет действительно сложным...

15
задан Martijn Courteaux 8 October 2016 в 17:07
поделиться

3 ответа

Похоже, что нет способа сделать это с помощью AWT.

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

import javax.swing.filechooser.FileSystemView;
import javax.swing.Icon;

...

Icon ico = FileSystemView.getFileSystemView().getSystemIcon(file);

Вы также можете преобразовать этот Icon обратно в Image (скорее всего, BufferedImage, но я его не тестировал):

Image image = ((ImageIcon) ico).getImage();

Существует также класс для прямого получения значка, но этот класс зависит от JDK. В Sun JDK это класс sun.awt.shell.ShellFolder .

Если вы используете SWT, все немного сложнее .

14
ответ дан 1 December 2019 в 03:14
поделиться

Я не думаю, что приведенные выше ответы относятся к правильному вопросу. Martijn не запрашивает API для управления изображениями значков. Он хочет знать, как получить доступ к кешу на рабочем столе с миниатюрами изображений для элементов в просматриваемой файловой системе.

Я не думаю, что есть переносимый способ сделать это вообще, но мир Linux (Gnome и KDE) придерживается стандарт эскизов Freedesktop, который можно прочитать по адресу: http://jens.triq.net/thumbnail-spec/

Может быть код, возможно в Gtk (но, вероятно, не Java), который реализует уровень совместимости для windows, но я не знаю, есть ли там.

6
ответ дан 1 December 2019 в 03:14
поделиться

Not entirely sure if you will be able to get the icon but take a look at AssociationService that is accessible using JDIC.

http://java.sun.com/developer/technicalArticles/J2SE/Desktop/jdic_assoc/

Also this thread http://forums.sun.com/thread.jspa?threadID=5357995

0
ответ дан 1 December 2019 в 03:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: