Fixed not terminating the process when closed window

This commit is contained in:
huangyuhui 2018-03-03 22:56:42 +08:00
parent c6ab7878e7
commit 5b5a58a867
11 changed files with 92 additions and 11 deletions

View File

@ -17,6 +17,13 @@
*/ */
package org.jackhuang.hmcl.event; package org.jackhuang.hmcl.event;
import org.jackhuang.hmcl.auth.Account;
import org.jackhuang.hmcl.setting.Profile;
import org.jackhuang.hmcl.util.ToStringBuilder;
import java.util.Collection;
import java.util.Collections;
/** /**
* This event gets fired when loading accounts. * This event gets fired when loading accounts.
* <br> * <br>
@ -26,14 +33,29 @@ package org.jackhuang.hmcl.event;
*/ */
public class AccountLoadingEvent extends Event { public class AccountLoadingEvent extends Event {
private final Collection<Account> accounts;
/** /**
* Constructor. * Constructor.
* *
* @param source {@link org.jackhuang.hmcl.setting.Settings} * @param source {@link org.jackhuang.hmcl.setting.Settings}
*/ */
public AccountLoadingEvent(Object source) { public AccountLoadingEvent(Object source, Collection<Account> accounts) {
super(source); super(source);
this.accounts = Collections.unmodifiableCollection(accounts);
} }
public Collection<Account> getAccounts() {
return accounts;
}
@Override
public String toString() {
return new ToStringBuilder(this)
.append("source", source)
.append("accounts", accounts)
.toString();
}
} }

View File

@ -17,6 +17,7 @@
*/ */
package org.jackhuang.hmcl.event; package org.jackhuang.hmcl.event;
import org.jackhuang.hmcl.util.ToStringBuilder;
import org.jackhuang.hmcl.util.VersionNumber; import org.jackhuang.hmcl.util.VersionNumber;
/** /**
@ -42,4 +43,11 @@ public final class OutOfDateEvent extends Event {
return true; return true;
} }
@Override
public String toString() {
return new ToStringBuilder(this)
.append("source", getSource())
.append("version", getVersion())
.toString();
}
} }

View File

@ -18,6 +18,7 @@
package org.jackhuang.hmcl.event; package org.jackhuang.hmcl.event;
import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.setting.Profile;
import org.jackhuang.hmcl.util.ToStringBuilder;
/** /**
* This event gets fired when the selected profile changed. * This event gets fired when the selected profile changed.
@ -44,4 +45,11 @@ public final class ProfileChangedEvent extends Event {
return profile; return profile;
} }
@Override
public String toString() {
return new ToStringBuilder(this)
.append("source", source)
.append("profile", profile)
.toString();
}
} }

View File

@ -17,6 +17,12 @@
*/ */
package org.jackhuang.hmcl.event; package org.jackhuang.hmcl.event;
import org.jackhuang.hmcl.setting.Profile;
import org.jackhuang.hmcl.util.ToStringBuilder;
import java.util.Collection;
import java.util.Collections;
/** /**
* This event gets fired when loading profiles. * This event gets fired when loading profiles.
* <br> * <br>
@ -26,14 +32,29 @@ package org.jackhuang.hmcl.event;
*/ */
public class ProfileLoadingEvent extends Event { public class ProfileLoadingEvent extends Event {
private final Collection<Profile> profiles;
/** /**
* Constructor. * Constructor.
* *
* @param source {@link org.jackhuang.hmcl.setting.Settings} * @param source {@link org.jackhuang.hmcl.setting.Settings}
*/ */
public ProfileLoadingEvent(Object source) { public ProfileLoadingEvent(Object source, Collection<Profile> profiles) {
super(source); super(source);
this.profiles = Collections.unmodifiableCollection(profiles);
} }
public Collection<Profile> getProfiles() {
return profiles;
}
@Override
public String toString() {
return new ToStringBuilder(this)
.append("source", source)
.append("profiles", profiles)
.toString();
}
} }

View File

@ -50,7 +50,6 @@ public final class LauncherHelper {
public static final LauncherHelper INSTANCE = new LauncherHelper(); public static final LauncherHelper INSTANCE = new LauncherHelper();
private LauncherHelper(){} private LauncherHelper(){}
private TaskExecutor executor;
public static final Queue<ManagedProcess> PROCESSES = new ConcurrentLinkedQueue<>(); public static final Queue<ManagedProcess> PROCESSES = new ConcurrentLinkedQueue<>();
private final TaskExecutorDialogPane launchingStepsPane = new TaskExecutorDialogPane(() -> {}); private final TaskExecutorDialogPane launchingStepsPane = new TaskExecutorDialogPane(() -> {});
@ -78,7 +77,7 @@ public final class LauncherHelper {
VersionSetting setting = profile.getVersionSetting(selectedVersion); VersionSetting setting = profile.getVersionSetting(selectedVersion);
Optional<String> gameVersion = GameVersion.minecraftVersion(repository.getVersionJar(version)); Optional<String> gameVersion = GameVersion.minecraftVersion(repository.getVersionJar(version));
TaskExecutor executor = this.executor = Task.of(Schedulers.javafx(), () -> Controllers.dialog(launchingStepsPane)) TaskExecutor executor = Task.of(Schedulers.javafx(), () -> Controllers.dialog(launchingStepsPane))
.then(Task.of(Schedulers.javafx(), () -> emitStatus(LoadingState.DEPENDENCIES))) .then(Task.of(Schedulers.javafx(), () -> emitStatus(LoadingState.DEPENDENCIES)))
.then(variables -> { .then(variables -> {
if (setting.isNotCheckGame()) if (setting.isNotCheckGame())
@ -162,8 +161,7 @@ public final class LauncherHelper {
Controllers.closeDialog(); Controllers.closeDialog();
}); });
} }
launchingStepsPane.setExecutor(null);
LauncherHelper.this.executor = null;
} }
}); });

View File

@ -24,6 +24,7 @@ import org.jackhuang.hmcl.game.HMCLGameRepository;
import org.jackhuang.hmcl.mod.ModManager; import org.jackhuang.hmcl.mod.ModManager;
import org.jackhuang.hmcl.util.ImmediateObjectProperty; import org.jackhuang.hmcl.util.ImmediateObjectProperty;
import org.jackhuang.hmcl.util.ImmediateStringProperty; import org.jackhuang.hmcl.util.ImmediateStringProperty;
import org.jackhuang.hmcl.util.ToStringBuilder;
import java.io.File; import java.io.File;
import java.lang.reflect.Type; import java.lang.reflect.Type;
@ -146,6 +147,14 @@ public final class Profile {
vs.setUsesGlobal(true); vs.setUsesGlobal(true);
} }
@Override
public String toString() {
return new ToStringBuilder(this)
.append("gameDir", getGameDir())
.append("name", getName())
.toString();
}
public void addPropertyChangedListener(InvalidationListener listener) { public void addPropertyChangedListener(InvalidationListener listener) {
nameProperty.addListener(listener); nameProperty.addListener(listener);
globalProperty.addListener(listener); globalProperty.addListener(listener);

View File

@ -535,7 +535,7 @@ public class Settings {
} }
private void onProfileChanged() { private void onProfileChanged() {
EventBus.EVENT_BUS.fireEvent(new ProfileChangedEvent(SETTINGS, getSelectedProfile())); EventBus.EVENT_BUS.fireEvent(new ProfileChangedEvent(this, getSelectedProfile()));
getSelectedProfile().getRepository().refreshVersionsAsync().start(); getSelectedProfile().getRepository().refreshVersionsAsync().start();
} }
@ -548,11 +548,11 @@ public class Settings {
* Invoked by loading GUI phase. * Invoked by loading GUI phase.
*/ */
public void onProfileLoading() { public void onProfileLoading() {
EventBus.EVENT_BUS.fireEvent(new ProfileLoadingEvent(SETTINGS)); EventBus.EVENT_BUS.fireEvent(new ProfileLoadingEvent(this, getProfiles()));
onProfileChanged(); onProfileChanged();
} }
public void onAccountLoading() { public void onAccountLoading() {
EventBus.EVENT_BUS.fireEvent(new AccountLoadingEvent(SETTINGS)); EventBus.EVENT_BUS.fireEvent(new AccountLoadingEvent(this, getAccounts()));
} }
} }

View File

@ -45,6 +45,7 @@ import javafx.scene.shape.Rectangle;
import javafx.stage.Screen; import javafx.stage.Screen;
import javafx.stage.Stage; import javafx.stage.Stage;
import javafx.stage.StageStyle; import javafx.stage.StageStyle;
import org.jackhuang.hmcl.Launcher;
import org.jackhuang.hmcl.setting.EnumBackgroundImage; import org.jackhuang.hmcl.setting.EnumBackgroundImage;
import org.jackhuang.hmcl.setting.Settings; import org.jackhuang.hmcl.setting.Settings;
import org.jackhuang.hmcl.setting.Theme; import org.jackhuang.hmcl.setting.Theme;
@ -140,7 +141,7 @@ public final class Decorator extends StackPane implements TaskExecutorDialogWiza
FXUtils.loadFXML(this, "/assets/fxml/decorator.fxml"); FXUtils.loadFXML(this, "/assets/fxml/decorator.fxml");
onCloseButtonAction = new SimpleObjectProperty<>(this, "onCloseButtonAction", primaryStage::close); onCloseButtonAction = new SimpleObjectProperty<>(this, "onCloseButtonAction", Launcher::stopApplication);
primaryStage.initStyle(StageStyle.UNDECORATED); primaryStage.initStyle(StageStyle.UNDECORATED);
btnClose.setGraphic(close); btnClose.setGraphic(close);

View File

@ -57,7 +57,9 @@ public class TaskExecutorDialogPane extends StackPane {
public void setExecutor(TaskExecutor executor) { public void setExecutor(TaskExecutor executor) {
this.executor = executor; this.executor = executor;
taskListPane.setExecutor(executor);
if (executor != null)
taskListPane.setExecutor(executor);
} }
public StringProperty titleProperty() { public StringProperty titleProperty() {

View File

@ -37,6 +37,7 @@ public class CrashReporter implements Thread.UncaughtExceptionHandler {
private static final HashMap<String, String> SOURCE = new HashMap<String, String>() { private static final HashMap<String, String> SOURCE = new HashMap<String, String>() {
{ {
put("javafx.fxml.LoadException", Launcher.i18n("crash.NoClassDefFound")); put("javafx.fxml.LoadException", Launcher.i18n("crash.NoClassDefFound"));
put("Location is not set", Launcher.i18n("crash.NoClassDefFound"));
put("UnsatisfiedLinkError", Launcher.i18n("crash.user_fault")); put("UnsatisfiedLinkError", Launcher.i18n("crash.user_fault"));
put("java.lang.NoClassDefFoundError", Launcher.i18n("crash.NoClassDefFound")); put("java.lang.NoClassDefFoundError", Launcher.i18n("crash.NoClassDefFound"));
put("java.lang.VerifyError", Launcher.i18n("crash.NoClassDefFound")); put("java.lang.VerifyError", Launcher.i18n("crash.NoClassDefFound"));

View File

@ -17,6 +17,8 @@
*/ */
package org.jackhuang.hmcl.auth; package org.jackhuang.hmcl.auth;
import org.jackhuang.hmcl.util.ToStringBuilder;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
@ -64,4 +66,13 @@ public abstract class Account {
public abstract Map<Object, Object> toStorage(); public abstract Map<Object, Object> toStorage();
public abstract void clearCache(); public abstract void clearCache();
@Override
public String toString() {
return new ToStringBuilder(this)
.append("username", getUsername())
.append("character", getCharacter())
.append("uuid", getUUID())
.toString();
}
} }