diff --git a/build.gradle b/build.gradle
index 7857b19d63..782a8a041d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -10,7 +10,7 @@ sourceSets.main.resources.srcDirs += 'src/main/java'
javafx {
appID 'Bitsquare'
appName 'Bitsquare'
- mainClass 'io.bitsquare.BitSquare'
+ mainClass 'io.bitsquare.BitSquareUI'
profiles {
windows {
diff --git a/src/main/java/io/bitsquare/BitSquare.java b/src/main/java/io/bitsquare/BitSquare.java
index 3d197da79d..e3801fb7ec 100644
--- a/src/main/java/io/bitsquare/BitSquare.java
+++ b/src/main/java/io/bitsquare/BitSquare.java
@@ -17,37 +17,14 @@
package io.bitsquare;
-import io.bitsquare.btc.WalletFacade;
-import io.bitsquare.di.BitSquareModule;
-import io.bitsquare.gui.AWTSystemTray;
-import io.bitsquare.gui.Navigation;
-import io.bitsquare.gui.components.Popups;
-import io.bitsquare.gui.util.ImageUtil;
-import io.bitsquare.gui.util.Profiler;
-import io.bitsquare.msg.MessageFacade;
import io.bitsquare.msg.actor.DHTManager;
import io.bitsquare.msg.actor.command.InitializePeer;
import io.bitsquare.msg.actor.event.PeerInitialized;
-import io.bitsquare.persistence.Persistence;
-import io.bitsquare.settings.Settings;
-import io.bitsquare.user.User;
import io.bitsquare.util.BitsquareArgumentParser;
-import io.bitsquare.util.ViewLoader;
-import com.google.common.base.Throwables;
-
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-
-import java.io.IOException;
-
-import java.util.Arrays;
+import java.util.concurrent.TimeoutException;
import javafx.application.Application;
-import javafx.scene.*;
-import javafx.scene.image.*;
-import javafx.scene.input.*;
-import javafx.stage.Stage;
import net.tomp2p.peers.Number160;
@@ -57,27 +34,20 @@ import org.slf4j.LoggerFactory;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Inbox;
-import lighthouse.files.AppDirectory;
import net.sourceforge.argparse4j.inf.ArgumentParserException;
import net.sourceforge.argparse4j.inf.Namespace;
+import scala.concurrent.duration.Duration;
import scala.concurrent.duration.FiniteDuration;
-public class BitSquare extends Application {
- private static final Logger log = LoggerFactory.getLogger(BitSquare.class);
+public class BitSquare {
- public static final boolean fillFormsWithDummyData = true;
+ private static String appName = "Bitsquare";
- private static String APP_NAME = "Bitsquare";
- private static Injector injector;
- private static Stage primaryStage;
- private WalletFacade walletFacade;
- private MessageFacade messageFacade;
+ public static String getAppName() {
+ return appName;
+ }
public static void main(String[] args) {
- Profiler.init();
- Profiler.printMsgWithTime("BitSquare.main called with args " + Arrays.asList(args).toString());
-
- injector = Guice.createInjector(new BitSquareModule());
BitsquareArgumentParser parser = new BitsquareArgumentParser();
Namespace namespace = null;
@@ -90,7 +60,7 @@ public class BitSquare extends Application {
if (namespace != null) {
if (namespace.getString(BitsquareArgumentParser.NAME_FLAG) != null) {
- APP_NAME = APP_NAME + "-" + namespace.getString(BitsquareArgumentParser.NAME_FLAG);
+ appName = appName + "-" + namespace.getString(BitsquareArgumentParser.NAME_FLAG);
}
Integer port = BitsquareArgumentParser.PORT_DEFAULT;
@@ -98,133 +68,42 @@ public class BitSquare extends Application {
port = Integer.valueOf(namespace.getString(BitsquareArgumentParser.PORT_FLAG));
}
if (namespace.getBoolean(BitsquareArgumentParser.SEED_FLAG) == true) {
- ActorSystem system = injector.getInstance(ActorSystem.class);
- ActorRef seedNode = system.actorOf(DHTManager.getProps(), DHTManager.SEED_NAME);
- Inbox inbox = Inbox.create(system);
+ ActorSystem actorSystem = ActorSystem.create(getAppName());
+
+ ActorRef seedNode = actorSystem.actorOf(DHTManager.getProps(), DHTManager.SEED_NAME);
+ Inbox inbox = Inbox.create(actorSystem);
inbox.send(seedNode, new InitializePeer(Number160.createHash("localhost"), port, null));
- //dhtManager.tell(new InitializePeer(Number160.createHash("localhost"), port, null), null);
- Boolean quit = false;
- Thread seedNodeThread = new Thread(new Runnable() {
- @Override
- public void run() {
- while (!quit) {
- try {
- Object m = inbox.receive(FiniteDuration.create(5L, "seconds"));
- if (m instanceof PeerInitialized) {
- System.out.println("Seed Peer Initialized on port " + ((PeerInitialized) m)
- .getPort());
- }
- } catch (Exception e) {
- // do nothing
+
+ Thread seedNodeThread = new Thread(() -> {
+ Boolean quit = false;
+ while (!quit) {
+ try {
+ Object m = inbox.receive(FiniteDuration.create(5L, "seconds"));
+ if (m instanceof PeerInitialized) {
+ System.out.println("Seed Peer Initialized on port " + ((PeerInitialized) m).getPort
+ ());
+ }
+ } catch (Exception e) {
+ if (!(e instanceof TimeoutException)) {
+ quit = true;
}
}
}
+ actorSystem.shutdown();
+ try {
+ actorSystem.awaitTermination(Duration.create(5L, "seconds"));
+ } catch (Exception ex) {
+ if (ex instanceof TimeoutException)
+ System.out.println("ActorSystem did not shutdown properly.");
+ else
+ System.out.println(ex.getMessage());
+ }
});
seedNodeThread.start();
}
else {
- launch(args);
+ Application.launch(BitSquareUI.class, args);
}
}
}
-
- public static Stage getPrimaryStage() {
- return primaryStage;
- }
-
- public static String getAppName() {
- return APP_NAME;
- }
-
- @Override
- public void start(Stage primaryStage) {
- Profiler.printMsgWithTime("BitSquare.start called");
- BitSquare.primaryStage = primaryStage;
-
- Thread.currentThread().setUncaughtExceptionHandler((thread, throwable) -> Popups.handleUncaughtExceptions
- (Throwables.getRootCause(throwable)));
-
- try {
- AppDirectory.initAppDir(APP_NAME);
- } catch (IOException e) {
- log.error(e.getMessage());
- }
-
-// final Injector injector = Guice.createInjector(new BitSquareModule());
-
- // currently there is not SystemTray support for java fx (planned for version 3) so we use the old AWT
- AWTSystemTray.createSystemTray(primaryStage, injector.getInstance(ActorSystem.class));
-
- walletFacade = injector.getInstance(WalletFacade.class);
- messageFacade = injector.getInstance(MessageFacade.class);
- Profiler.printMsgWithTime("BitSquare: messageFacade, walletFacade created");
-
- // apply stored data
- final User user = injector.getInstance(User.class);
- final Settings settings = injector.getInstance(Settings.class);
- final Persistence persistence = injector.getInstance(Persistence.class);
- persistence.init();
-
- User persistedUser = (User) persistence.read(user);
- user.applyPersistedUser(persistedUser);
-
- settings.applyPersistedSettings((Settings) persistence.read(settings.getClass().getName()));
-
- primaryStage.setTitle("BitSquare (" + APP_NAME + ")");
-
- // sometimes there is a rendering bug, see https://github.com/bitsquare/bitsquare/issues/160
- if (ImageUtil.isRetina())
- primaryStage.getIcons().add(new Image(getClass().getResourceAsStream("/images/window_icon@2x.png")));
- else
- primaryStage.getIcons().add(new Image(getClass().getResourceAsStream("/images/window_icon.png")));
-
- ViewLoader.setInjector(injector);
-
- final ViewLoader loader =
- new ViewLoader(getClass().getResource(Navigation.Item.MAIN.getFxmlUrl()), false);
- try {
- final Parent view = loader.load();
-
- final Scene scene = new Scene(view, 1000, 900);
- scene.getStylesheets().setAll(getClass().getResource("/io/bitsquare/gui/bitsquare.css").toExternalForm(),
- getClass().getResource("/io/bitsquare/gui/images.css").toExternalForm());
-
- setupCloseHandlers(primaryStage, scene);
-
- primaryStage.setScene(scene);
-
- // TODO resizing not fully supported yet
-
- primaryStage.setMinWidth(75);
- primaryStage.setMinHeight(50);
-
- /* primaryStage.setMinWidth(1000);
- primaryStage.setMinHeight(750);*/
-
- Profiler.initScene(primaryStage.getScene());
-
- primaryStage.show();
- } catch (IOException e) {
- e.printStackTrace();
- log.error(e.getMessage());
- }
- }
-
- private void setupCloseHandlers(Stage primaryStage, Scene scene) {
- primaryStage.setOnCloseRequest(e -> AWTSystemTray.setStageHidden());
-
- KeyCodeCombination keyCodeCombination = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
- scene.setOnKeyReleased(keyEvent -> {
- if (keyCodeCombination.match(keyEvent)) AWTSystemTray.setStageHidden();
- });
- }
-
- @Override
- public void stop() throws Exception {
- walletFacade.shutDown();
- messageFacade.shutDown();
-
- super.stop();
- System.exit(0);
- }
}
diff --git a/src/main/java/io/bitsquare/BitSquareUI.java b/src/main/java/io/bitsquare/BitSquareUI.java
new file mode 100644
index 0000000000..046a1c7c5f
--- /dev/null
+++ b/src/main/java/io/bitsquare/BitSquareUI.java
@@ -0,0 +1,161 @@
+/*
+ * This file is part of Bitsquare.
+ *
+ * Bitsquare is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * Bitsquare is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Bitsquare. If not, see .
+ */
+
+package io.bitsquare;
+
+import io.bitsquare.btc.WalletFacade;
+import io.bitsquare.di.BitSquareModule;
+import io.bitsquare.gui.AWTSystemTray;
+import io.bitsquare.gui.Navigation;
+import io.bitsquare.gui.components.Popups;
+import io.bitsquare.gui.util.ImageUtil;
+import io.bitsquare.gui.util.Profiler;
+import io.bitsquare.msg.MessageFacade;
+import io.bitsquare.persistence.Persistence;
+import io.bitsquare.settings.Settings;
+import io.bitsquare.user.User;
+import io.bitsquare.util.ViewLoader;
+
+import com.google.common.base.Throwables;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+
+import java.io.IOException;
+
+import javafx.application.Application;
+import javafx.scene.*;
+import javafx.scene.image.*;
+import javafx.scene.input.*;
+import javafx.stage.Stage;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import akka.actor.ActorSystem;
+import lighthouse.files.AppDirectory;
+
+public class BitSquareUI extends Application {
+ private static final Logger log = LoggerFactory.getLogger(BitSquareUI.class);
+
+ public static final boolean fillFormsWithDummyData = true;
+
+ private static Injector injector;
+ private static Stage primaryStage;
+ private WalletFacade walletFacade;
+ private MessageFacade messageFacade;
+
+ public void BitSquareUI() {
+ Profiler.init();
+ }
+
+ public static Stage getPrimaryStage() {
+ return primaryStage;
+ }
+
+ @Override
+ public void start(Stage primaryStage) {
+ Profiler.printMsgWithTime("BitSquare.start called");
+ BitSquareUI.primaryStage = primaryStage;
+
+ Thread.currentThread().setUncaughtExceptionHandler((thread, throwable) -> Popups.handleUncaughtExceptions
+ (Throwables.getRootCause(throwable)));
+
+ try {
+ AppDirectory.initAppDir(BitSquare.getAppName());
+ } catch (IOException e) {
+ log.error(e.getMessage());
+ }
+
+ final Injector injector = Guice.createInjector(new BitSquareModule());
+
+ // currently there is not SystemTray support for java fx (planned for version 3) so we use the old AWT
+ AWTSystemTray.createSystemTray(primaryStage, injector.getInstance(ActorSystem.class));
+
+ walletFacade = injector.getInstance(WalletFacade.class);
+ messageFacade = injector.getInstance(MessageFacade.class);
+ Profiler.printMsgWithTime("BitSquare: messageFacade, walletFacade created");
+
+ // apply stored data
+ final User user = injector.getInstance(User.class);
+ final Settings settings = injector.getInstance(Settings.class);
+ final Persistence persistence = injector.getInstance(Persistence.class);
+ persistence.init();
+
+ User persistedUser = (User) persistence.read(user);
+ user.applyPersistedUser(persistedUser);
+
+ settings.applyPersistedSettings((Settings) persistence.read(settings.getClass().getName()));
+
+ primaryStage.setTitle("BitSquare (" + BitSquare.getAppName() + ")");
+
+ // sometimes there is a rendering bug, see https://github.com/bitsquare/bitsquare/issues/160
+ if (ImageUtil.isRetina())
+ primaryStage.getIcons().add(new Image(getClass().getResourceAsStream("/images/window_icon@2x.png")));
+ else
+ primaryStage.getIcons().add(new Image(getClass().getResourceAsStream("/images/window_icon.png")));
+
+ ViewLoader.setInjector(injector);
+
+ final ViewLoader loader =
+ new ViewLoader(getClass().getResource(Navigation.Item.MAIN.getFxmlUrl()), false);
+ try {
+ final Parent view = loader.load();
+
+ final Scene scene = new Scene(view, 1000, 900);
+ scene.getStylesheets().setAll(getClass().getResource("/io/bitsquare/gui/bitsquare.css").toExternalForm(),
+ getClass().getResource("/io/bitsquare/gui/images.css").toExternalForm());
+
+ setupCloseHandlers(primaryStage, scene);
+
+ primaryStage.setScene(scene);
+
+ // TODO resizing not fully supported yet
+
+ primaryStage.setMinWidth(75);
+ primaryStage.setMinHeight(50);
+
+ /* primaryStage.setMinWidth(1000);
+ primaryStage.setMinHeight(750);*/
+
+ Profiler.initScene(primaryStage.getScene());
+
+ primaryStage.show();
+ } catch (IOException e) {
+ e.printStackTrace();
+ log.error(e.getMessage());
+ }
+ }
+
+ private void setupCloseHandlers(Stage primaryStage, Scene scene) {
+ primaryStage.setOnCloseRequest(e -> AWTSystemTray.setStageHidden());
+
+ KeyCodeCombination keyCodeCombination = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
+ scene.setOnKeyReleased(keyEvent -> {
+ if (keyCodeCombination.match(keyEvent)) AWTSystemTray.setStageHidden();
+ });
+ }
+
+ @Override
+ public void stop() throws Exception {
+ walletFacade.shutDown();
+ messageFacade.shutDown();
+
+ super.stop();
+ System.exit(0);
+ }
+}
diff --git a/src/main/java/io/bitsquare/gui/components/Popups.java b/src/main/java/io/bitsquare/gui/components/Popups.java
index 0b2215ec08..1696087907 100644
--- a/src/main/java/io/bitsquare/gui/components/Popups.java
+++ b/src/main/java/io/bitsquare/gui/components/Popups.java
@@ -18,6 +18,7 @@
package io.bitsquare.gui.components;
import io.bitsquare.BitSquare;
+import io.bitsquare.BitSquareUI;
import io.bitsquare.gui.OverlayManager;
import io.bitsquare.locale.BSResources;
@@ -69,7 +70,7 @@ public class Popups {
public static void openInfo(String masthead, String message, List actions) {
Dialogs.create()
- .owner(BitSquare.getPrimaryStage())
+ .owner(BitSquareUI.getPrimaryStage())
.message(message)
.masthead(masthead)
.actions(actions)
@@ -103,7 +104,7 @@ public class Popups {
public static Action openConfirmPopup(String title, String masthead, String message, List actions) {
return Dialogs.create()
- .owner(BitSquare.getPrimaryStage())
+ .owner(BitSquareUI.getPrimaryStage())
.title(title)
.message(message)
.masthead(masthead)
@@ -135,7 +136,7 @@ public class Popups {
private static void openWarningPopup(String title, String masthead, String message, List actions) {
Dialogs.create()
- .owner(BitSquare.getPrimaryStage())
+ .owner(BitSquareUI.getPrimaryStage())
.title(title)
.message(message)
.masthead(masthead)
@@ -167,7 +168,7 @@ public class Popups {
private static Action openErrorPopup(String title, String masthead, String message, List actions) {
return Dialogs.create()
- .owner(BitSquare.getPrimaryStage())
+ .owner(BitSquareUI.getPrimaryStage())
.title(title)
.message(message)
.masthead(masthead)
@@ -195,7 +196,7 @@ public class Popups {
}
});
return Dialogs.create()
- .owner(BitSquare.getPrimaryStage())
+ .owner(BitSquareUI.getPrimaryStage())
.title(title)
.message(message)
.masthead(masthead)
diff --git a/src/main/java/io/bitsquare/gui/main/account/arbitrator/ArbitratorSettingsViewCB.java b/src/main/java/io/bitsquare/gui/main/account/arbitrator/ArbitratorSettingsViewCB.java
index 9dc40f1061..8b6b814817 100644
--- a/src/main/java/io/bitsquare/gui/main/account/arbitrator/ArbitratorSettingsViewCB.java
+++ b/src/main/java/io/bitsquare/gui/main/account/arbitrator/ArbitratorSettingsViewCB.java
@@ -18,6 +18,7 @@
package io.bitsquare.gui.main.account.arbitrator;
import io.bitsquare.BitSquare;
+import io.bitsquare.BitSquareUI;
import io.bitsquare.gui.CachedViewCB;
import io.bitsquare.gui.Navigation;
import io.bitsquare.gui.main.account.arbitrator.registration.ArbitratorRegistrationViewCB;
@@ -102,7 +103,7 @@ public class ArbitratorSettingsViewCB extends CachedViewCB {
final Parent view = loader.load();
arbitratorRegistrationViewCB = loader.getController();
- final Stage rootStage = BitSquare.getPrimaryStage();
+ final Stage rootStage = BitSquareUI.getPrimaryStage();
final Stage stage = new Stage();
stage.setTitle("Arbitrator");
stage.setMinWidth(800);
diff --git a/src/main/java/io/bitsquare/gui/main/account/content/restrictions/RestrictionsViewCB.java b/src/main/java/io/bitsquare/gui/main/account/content/restrictions/RestrictionsViewCB.java
index c0cc8e1f76..8b65c1f90a 100644
--- a/src/main/java/io/bitsquare/gui/main/account/content/restrictions/RestrictionsViewCB.java
+++ b/src/main/java/io/bitsquare/gui/main/account/content/restrictions/RestrictionsViewCB.java
@@ -18,6 +18,7 @@
package io.bitsquare.gui.main.account.content.restrictions;
import io.bitsquare.BitSquare;
+import io.bitsquare.BitSquareUI;
import io.bitsquare.arbitrator.Arbitrator;
import io.bitsquare.gui.CachedViewCB;
import io.bitsquare.gui.Navigation;
@@ -196,7 +197,7 @@ public class RestrictionsViewCB extends CachedViewCB implements
Initializable childController = loader.getController();
//childController.setParentController(this);
- final Stage rootStage = BitSquare.getPrimaryStage();
+ final Stage rootStage = BitSquareUI.getPrimaryStage();
final Stage stage = new Stage();
stage.setTitle("Arbitrator selection");
stage.setMinWidth(800);
diff --git a/src/main/java/io/bitsquare/gui/main/help/Help.java b/src/main/java/io/bitsquare/gui/main/help/Help.java
index 8cc64e7b91..d7d9263b52 100644
--- a/src/main/java/io/bitsquare/gui/main/help/Help.java
+++ b/src/main/java/io/bitsquare/gui/main/help/Help.java
@@ -18,6 +18,7 @@
package io.bitsquare.gui.main.help;
import io.bitsquare.BitSquare;
+import io.bitsquare.BitSquareUI;
import java.net.MalformedURLException;
import java.net.URL;
@@ -49,7 +50,7 @@ public class Help {
if (helpWindow == null) {
helpWindow = new Stage();
helpWindow.initModality(Modality.NONE);
- helpWindow.initOwner(BitSquare.getPrimaryStage());
+ helpWindow.initOwner(BitSquareUI.getPrimaryStage());
webView = new WebView();
helpWindow.setScene(new Scene(webView, 800, 600));
}