将DEFAULT_ICON移至Constants, 并使用懒加载

当类初始化时, JavaFX可能还未启动, 这将使图像加载失败
This commit is contained in:
yushijinhun 2018-06-16 18:15:30 +08:00
parent 53cad0e56a
commit 593159f4a6
No known key found for this signature in database
GPG Key ID: 5BC167F73EA558E4
4 changed files with 14 additions and 8 deletions

View File

@ -46,6 +46,7 @@ import org.jackhuang.hmcl.ui.animation.TransitionHandler;
import org.jackhuang.hmcl.ui.construct.AdvancedListBox; import org.jackhuang.hmcl.ui.construct.AdvancedListBox;
import org.jackhuang.hmcl.ui.construct.IconedItem; import org.jackhuang.hmcl.ui.construct.IconedItem;
import org.jackhuang.hmcl.ui.construct.Validator; import org.jackhuang.hmcl.ui.construct.Validator;
import org.jackhuang.hmcl.util.Constants;
import org.jackhuang.hmcl.util.Logging; import org.jackhuang.hmcl.util.Logging;
import java.util.Collection; import java.util.Collection;
@ -224,13 +225,13 @@ public class AddAccountPane extends StackPane {
image = AccountHelper.getSkinImmediately(yggdrasilAccount, profile, 4, Settings.INSTANCE.getProxy()); image = AccountHelper.getSkinImmediately(yggdrasilAccount, profile, 4, Settings.INSTANCE.getProxy());
} catch (Exception e) { } catch (Exception e) {
Logging.LOG.log(Level.WARNING, "Failed to get skin for " + profile.getName(), e); Logging.LOG.log(Level.WARNING, "Failed to get skin for " + profile.getName(), e);
image = FXUtils.DEFAULT_ICON; image = null;
} }
ImageView portraitView = new ImageView(); ImageView portraitView = new ImageView();
portraitView.setSmooth(false); portraitView.setSmooth(false);
if (image == FXUtils.DEFAULT_ICON) if (image == null) {
portraitView.setImage(FXUtils.DEFAULT_ICON); portraitView.setImage(Constants.DEFAULT_ICON.get());
else { } else {
portraitView.setImage(image); portraitView.setImage(image);
portraitView.setViewport(AccountHelper.getViewport(4)); portraitView.setViewport(AccountHelper.getViewport(4));
} }

View File

@ -34,7 +34,6 @@ import javafx.scene.control.ListView;
import javafx.scene.control.ScrollBar; import javafx.scene.control.ScrollBar;
import javafx.scene.control.ScrollPane; import javafx.scene.control.ScrollPane;
import javafx.scene.control.Tooltip; import javafx.scene.control.Tooltip;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView; import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent; import javafx.scene.input.MouseEvent;
import javafx.scene.input.ScrollEvent; import javafx.scene.input.ScrollEvent;
@ -402,8 +401,6 @@ public final class FXUtils {
} }
} }
public static final Image DEFAULT_ICON = new Image("/assets/img/icon.png");
public static final Interpolator SINE = new Interpolator() { public static final Interpolator SINE = new Interpolator() {
@Override @Override
protected double curve(double t) { protected double curve(double t) {

View File

@ -264,7 +264,7 @@ public final class VersionSettingsController {
if (iconFile.exists()) if (iconFile.exists())
iconPickerItem.setImage(new Image("file:" + iconFile.getAbsolutePath())); iconPickerItem.setImage(new Image("file:" + iconFile.getAbsolutePath()));
else else
iconPickerItem.setImage(FXUtils.DEFAULT_ICON); iconPickerItem.setImage(Constants.DEFAULT_ICON.get());
FXUtils.limitSize(iconPickerItem.getImageView(), 32, 32); FXUtils.limitSize(iconPickerItem.getImageView(), 32, 32);
} }
} }

View File

@ -19,6 +19,11 @@ package org.jackhuang.hmcl.util;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.ObjectBinding;
import javafx.scene.image.Image;
import org.jackhuang.hmcl.game.Argument; import org.jackhuang.hmcl.game.Argument;
import org.jackhuang.hmcl.game.Library; import org.jackhuang.hmcl.game.Library;
import org.jackhuang.hmcl.game.RuledArgument; import org.jackhuang.hmcl.game.RuledArgument;
@ -65,6 +70,9 @@ public final class Constants {
javafx.application.Platform.runLater(s); javafx.application.Platform.runLater(s);
}; };
// lazy loading
public static final ObjectBinding<Image> DEFAULT_ICON = Bindings.createObjectBinding(() -> new Image("/assets/img/icon.png"));
public static final Gson GSON = new GsonBuilder() public static final Gson GSON = new GsonBuilder()
.enableComplexMapKeySerialization() .enableComplexMapKeySerialization()
.setPrettyPrinting() .setPrettyPrinting()