New animationsublime_text launch4jlinux.cpp

This commit is contained in:
huanghongxun
2015-12-12 21:00:32 +08:00
parent 68a734adb0
commit b3fb372e3b
16 changed files with 169 additions and 52 deletions

View File

@@ -80,7 +80,8 @@ jar {
}
launch4j {
launch4jCmd = 'D:\\Develop\\Java\\Launch4j\\launch4j.exe'
//launch4jCmd = 'D:\\Develop\\Java\\Launch4j\\launch4j.exe'
launch4jCmd = '/home/huangyuhui/softwares/launch4j/launch4j'
supportUrl = 'http://www.mcbbs.net/thread-142335-1-1.html'
jreMinVersion = '1.6.0'

View File

@@ -104,7 +104,7 @@ public final class Main implements Runnable {
}
public static String launcherName = "Hello Minecraft! Launcher";
public static byte firstVer = 2, secondVer = 3, thirdVer = 5, forthVer = 5;
public static byte firstVer = 2, secondVer = 3, thirdVer = 5, forthVer = 6;
public static int minimumLauncherVersion = 16;
//public static Proxy PROXY;

View File

@@ -46,16 +46,16 @@ public class CrashReporter implements Thread.UncaughtExceptionHandler {
public boolean checkThrowable(Throwable e) {
String s = StrUtils.getStackTrace(e);
if (s.contains("MessageBox") || s.contains("AWTError")) {
if (s.contains("MessageBox") || s.contains("AWTError"))
return false;
} else if (s.contains("JFileChooser") || s.contains("JceSecurityManager")) {
else if (s.contains("JFileChooser") || s.contains("JceSecurityManager")) {
System.out.println("Is not your operating system installed completely? ");
return false;
}
if (s.contains("sun.awt.shell.Win32ShellFolder2") || s.contains("UnsatisfiedLinkError")) {
System.out.println(C.i18n("crash.user_fault"));
try {
MessageBox.Show(C.i18n("crash.user_fault"));
showMessage(C.i18n("crash.user_fault"));
} catch (Throwable t) {
t.printStackTrace();
}
@@ -63,7 +63,7 @@ public class CrashReporter implements Thread.UncaughtExceptionHandler {
} else if (s.contains("java.awt.HeadlessException")) {
System.out.println(C.i18n("crash.headless"));
try {
MessageBox.Show(C.i18n("crash.headless"));
showMessage(C.i18n("crash.headless"));
} catch (Throwable t) {
t.printStackTrace();
}
@@ -71,7 +71,7 @@ public class CrashReporter implements Thread.UncaughtExceptionHandler {
} else if (s.contains("java.lang.NoClassDefFoundError") || s.contains("java.lang.VerifyError") || s.contains("java.lang.NoSuchMethodError") || s.contains("java.lang.IncompatibleClassChangeError") || s.contains("java.lang.ClassFormatError")) {
System.out.println(C.i18n("crash.NoClassDefFound"));
try {
MessageBox.Show(C.i18n("crash.NoClassDefFound"));
showMessage(C.i18n("crash.NoClassDefFound"));
} catch (Throwable t) {
t.printStackTrace();
}
@@ -110,25 +110,26 @@ public class CrashReporter implements Thread.UncaughtExceptionHandler {
reportToServer(text, s);
}
} catch (Throwable ex) {
try {
MessageBox.Show(e.getMessage() + "\n" + ex.getMessage(), "ERROR", MessageBox.ERROR_MESSAGE);
} catch (Throwable exx) {
System.out.println("Failed to catch exception thrown by " + t + " on " + Main.makeVersion() + ".");
exx.printStackTrace();
}
showMessage(e.getMessage() + "\n" + ex.getMessage());
ex.printStackTrace();
}
}
void showMessage() {
void showMessage(String s) {
try {
MessageBox.Show(s, "ERROR", MessageBox.ERROR_MESSAGE);
} catch (Throwable e) {
System.err.println("ERROR: " + s);
e.printStackTrace();
}
}
private static final HashSet<String> throwableSet = new HashSet<>();
private static final HashSet<String> THROWABLE_SET = new HashSet<>();
void reportToServer(String text, String stacktrace) {
if (throwableSet.contains(stacktrace))
if (THROWABLE_SET.contains(stacktrace))
return;
throwableSet.add(stacktrace);
THROWABLE_SET.add(stacktrace);
new Thread(() -> {
HashMap<String, String> map = new HashMap<>();
map.put("CrashReport", text);

View File

@@ -0,0 +1,85 @@
/*
* Hello Minecraft! Launcher.
* Copyright (C) 2013 huangyuhui <huanghongxun2008@126.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see {http://www.gnu.org/licenses/}.
*/
package org.jackhuang.hellominecraft.launcher.views;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
/**
*
* @author huangyuhui
*/
public class AnimatedPanel extends JPanel {
private static final int ANIMATION_LENGTH = 10;
public AnimatedPanel() {
timer = new Timer(1, (e) -> {
SwingUtilities.invokeLater(() -> {
AnimatedPanel.this.repaint();
offsetX += 0.15;
if (offsetX >= ANIMATION_LENGTH) {
timer.stop();
AnimatedPanel.this.repaint();
}
});
});
}
double offsetX = ANIMATION_LENGTH;
Timer timer;
public void animate() {
offsetX = 0;
timer.start();
}
@Override
public void paint(Graphics g) {
double pgs = 1 - Math.sin(Math.PI / 2 / ANIMATION_LENGTH * offsetX);
if(Math.abs(ANIMATION_LENGTH - offsetX) < 0.1) {
super.paint(g);
return;
}
if (pgs > 1)
pgs = 1;
if (pgs < 0)
pgs = 0;
Graphics2D gg = (Graphics2D) g;
int width = this.getWidth();
int height = this.getHeight();
if (isOpaque()) {
g.setColor(getBackground());
g.fillRect(0, 0, width, height);
}
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = image.createGraphics();
g2d.translate((int) (pgs * 50), 0);
super.paint(g2d);
g2d.dispose();
gg.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, (float) (1 - pgs)));
g.drawImage(image, 0, 0, this);
}
}

View File

@@ -5,6 +5,7 @@
<Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
<Color blue="ff" green="ff" red="ff" type="rgb"/>
</Property>
<Property name="opaque" type="boolean" value="false"/>
</Properties>
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
@@ -67,6 +68,9 @@
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout"/>
<SubComponents>
<Container class="javax.swing.JPanel" name="pnlSettings">
<AuxValues>
<AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new AnimatedPanel()"/>
</AuxValues>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription">
<JTabbedPaneConstraints tabName="&#x666e;&#x901a;&#x8bbe;&#x7f6e;">
@@ -337,6 +341,9 @@
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="pnlAdvancedSettings">
<AuxValues>
<AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new AnimatedPanel()"/>
</AuxValues>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription">
<JTabbedPaneConstraints tabName="&#x9ad8;&#x7ea7;&#x8bbe;&#x7f6e;">
@@ -523,6 +530,9 @@
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="pnlModManagement">
<AuxValues>
<AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new AnimatedPanel()"/>
</AuxValues>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription">
<JTabbedPaneConstraints tabName="Mod&#x7ba1;&#x7406;">
@@ -654,6 +664,9 @@
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="pnlAutoInstall">
<AuxValues>
<AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new AnimatedPanel()"/>
</AuxValues>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription">
<JTabbedPaneConstraints tabName="&#x81ea;&#x52a8;&#x5b89;&#x88c5;">
@@ -684,6 +697,9 @@
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="pnlGameDownloads">
<AuxValues>
<AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new AnimatedPanel()"/>
</AuxValues>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription">
<JTabbedPaneConstraints tabName="&#x6e38;&#x620f;&#x4e0b;&#x8f7d;">

View File

@@ -66,13 +66,13 @@ import rx.concurrency.Schedulers;
*
* @author huangyuhui
*/
public final class GameSettingsPanel extends javax.swing.JPanel implements DropTargetListener {
public final class GameSettingsPanel extends AnimatedPanel implements DropTargetListener {
boolean isLoading = false;
public MinecraftVersionRequest minecraftVersion;
String mcVersion;
InstallerPanel installerPanels[] = new InstallerPanel[InstallerType.values().length];
final InstallerPanel installerPanels[] = new InstallerPanel[InstallerType.values().length];
/**
* Creates new form GameSettingsPanel
@@ -206,6 +206,8 @@ public final class GameSettingsPanel extends javax.swing.JPanel implements DropT
@Override
public void stateChanged(ChangeEvent e) {
if (tabVersionEdit.getSelectedComponent() instanceof AnimatedPanel)
((AnimatedPanel) tabVersionEdit.getSelectedComponent()).animate();
if (tabVersionEdit.getSelectedComponent() == pnlGameDownloads && !a) {
a = true;
refreshDownloads();
@@ -215,8 +217,8 @@ public final class GameSettingsPanel extends javax.swing.JPanel implements DropT
}
}
});
for (InstallerType type : InstallerType.values())
tabInstallers.addTab(type.getLocalizedName(), new InstallerPanel(this, type));
for (int i = 0; i < InstallerType.values().length; i++)
tabInstallers.addTab(InstallerType.values()[i].getLocalizedName(), installerPanels[i]);
tabInstallers.addChangeListener(new ChangeListener() {
boolean refreshed[] = new boolean[InstallerType.values().length];
@@ -242,7 +244,7 @@ public final class GameSettingsPanel extends javax.swing.JPanel implements DropT
private void initComponents() {
tabVersionEdit = new javax.swing.JTabbedPane();
pnlSettings = new javax.swing.JPanel();
pnlSettings = new AnimatedPanel();
lblGameDir = new javax.swing.JLabel();
txtGameDir = new javax.swing.JTextField();
lblDimension = new javax.swing.JLabel();
@@ -263,7 +265,7 @@ public final class GameSettingsPanel extends javax.swing.JPanel implements DropT
btnChoosingJavaDir = new javax.swing.JButton();
cboJava = new javax.swing.JComboBox();
btnChoosingGameDir = new javax.swing.JButton();
pnlAdvancedSettings = new javax.swing.JPanel();
pnlAdvancedSettings = new AnimatedPanel();
chkDebug = new javax.swing.JCheckBox();
lblJavaArgs = new javax.swing.JLabel();
txtJavaArgs = new javax.swing.JTextField();
@@ -277,16 +279,16 @@ public final class GameSettingsPanel extends javax.swing.JPanel implements DropT
txtPrecalledCommand = new javax.swing.JTextField();
lblServerIP = new javax.swing.JLabel();
txtServerIP = new javax.swing.JTextField();
pnlModManagement = new javax.swing.JPanel();
pnlModManagement = new AnimatedPanel();
pnlModManagementContent = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
lstExternalMods = new javax.swing.JTable();
btnAddMod = new javax.swing.JButton();
btnRemoveMod = new javax.swing.JButton();
lblModInfo = new javax.swing.JLabel();
pnlAutoInstall = new javax.swing.JPanel();
pnlAutoInstall = new AnimatedPanel();
tabInstallers = new javax.swing.JTabbedPane();
pnlGameDownloads = new javax.swing.JPanel();
pnlGameDownloads = new AnimatedPanel();
btnDownload = new javax.swing.JButton();
jScrollPane2 = new javax.swing.JScrollPane();
lstDownloads = new javax.swing.JTable();
@@ -310,6 +312,7 @@ public final class GameSettingsPanel extends javax.swing.JPanel implements DropT
btnCleanGame = new javax.swing.JButton();
setBackground(new java.awt.Color(255, 255, 255));
setOpaque(false);
tabVersionEdit.setName("tabVersionEdit"); // NOI18N
@@ -1350,7 +1353,7 @@ public final class GameSettingsPanel extends javax.swing.JPanel implements DropT
@Override
public void drop(DropTargetDropEvent dtde) {
}
private void refreshVersions() {
getProfile().getMinecraftProvider().refreshVersions();
loadVersions();

View File

@@ -37,7 +37,7 @@ import org.jackhuang.hellominecraft.utils.SwingUtils;
*
* @author huangyuhui
*/
public class InstallerPanel extends javax.swing.JPanel {
public class InstallerPanel extends AnimatedPanel {
GameSettingsPanel gsp;
@@ -50,10 +50,10 @@ public class InstallerPanel extends javax.swing.JPanel {
public InstallerPanel(GameSettingsPanel gsp, InstallerType installerType) {
initComponents();
setOpaque(false);
this.gsp = gsp;
id = installerType;
list = Settings.getInstance().getDownloadSource().getProvider().getInstallerByType(id);
((DefaultTableModel) lstInstallers.getModel()).addRow(new Object[] {"hehe", "hehe"});
}
/**
@@ -138,7 +138,7 @@ public class InstallerPanel extends javax.swing.JPanel {
void downloadSelectedRow() {
int idx = lstInstallers.getSelectedRow();
if (idx < 0 || idx >= versions.size()) {
if (versions == null || idx < 0 || idx >= versions.size()) {
MessageBox.Show(C.i18n("install.not_refreshed"));
return;
}
@@ -147,20 +147,18 @@ public class InstallerPanel extends javax.swing.JPanel {
public void loadVersions() {
SwingUtilities.invokeLater(() -> {
versions = loadVersions(list, lstInstallers);
synchronized (InstallerPanel.this) {
DefaultTableModel model = (DefaultTableModel) lstInstallers.getModel();
String mcver = StrUtils.formatVersion(gsp.getMinecraftVersionFormatted());
versions = list.getVersions(mcver);
SwingUtils.clearDefaultTable(lstInstallers);
if (versions != null)
for (InstallerVersionList.InstallerVersion v : versions)
model.addRow(new Object[] {v.selfVersion == null ? "null" : v.selfVersion, v.mcVersion == null ? "null" : v.mcVersion});
}
});
}
private List<InstallerVersionList.InstallerVersion> loadVersions(InstallerVersionList list, JTable table) {
DefaultTableModel model = (DefaultTableModel) table.getModel();
String mcver = StrUtils.formatVersion(gsp.getMinecraftVersionFormatted());
List<InstallerVersionList.InstallerVersion> ver = list.getVersions(mcver);
SwingUtils.clearDefaultTable(table);
if (ver != null)
for (InstallerVersionList.InstallerVersion v : ver)
model.addRow(new Object[] {v.selfVersion == null ? "null" : v.selfVersion, v.mcVersion == null ? "null" : v.mcVersion});
return ver;
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btnInstall;

View File

@@ -34,7 +34,7 @@ import rx.Observable;
*
* @author huangyuhui
*/
public class LauncherSettingsPanel extends javax.swing.JPanel {
public class LauncherSettingsPanel extends AnimatedPanel {
/**
* Creates new form LancherSettingsPanel

View File

@@ -244,6 +244,7 @@ public final class MainFrame extends DraggableFrame {
}
public void selectTab(String tabName) {
boolean a = mainTab.isActive(), b = gameTab.isActive(), c = launcherTab.isActive();
this.mainTab.setIsActive(false);
this.gameTab.setIsActive(false);
this.launcherTab.setIsActive(false);
@@ -255,6 +256,8 @@ public final class MainFrame extends DraggableFrame {
}
this.mainTab.setIsActive(true);
this.mainPanel.onSelected();
if (!a)
mainPanel.animate();
} else if (tabName.equalsIgnoreCase("game")) {
if (gamePanel == null) {
gamePanel = new GameSettingsPanel();
@@ -262,12 +265,16 @@ public final class MainFrame extends DraggableFrame {
}
this.gameTab.setIsActive(true);
this.gamePanel.onSelected();
if (!b)
gamePanel.animate();
} else if (tabName.equalsIgnoreCase("launcher")) {
if (launcherPanel == null) {
launcherPanel = new LauncherSettingsPanel();
launcherPanelWrapper.add(launcherPanel);
}
this.launcherTab.setIsActive(true);
if (!c)
launcherPanel.animate();
}
this.infoLayout.show(this.infoSwap, tabName);

View File

@@ -47,7 +47,7 @@ import org.jackhuang.hellominecraft.utils.functions.Consumer;
*
* @author huangyuhui
*/
public class MainPagePanel extends javax.swing.JPanel {
public class MainPagePanel extends AnimatedPanel {
/**
* Creates new form MainPagePanel
@@ -336,6 +336,7 @@ public class MainPagePanel extends javax.swing.JPanel {
if (l.isLoggedIn())
l.logout();
cl.first(pnlPassword);
pnlPassword.repaint();
}//GEN-LAST:event_btnLogoutActionPerformed
private void txtPlayerNameKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtPlayerNameKeyPressed
@@ -423,7 +424,7 @@ public class MainPagePanel extends javax.swing.JPanel {
if (0 <= loginType && loginType < cboLoginMode.getItemCount()) {
preparingAuth = false;
//cboLoginMode.setSelectedIndex(loginType);
cboLoginMode.setSelectedIndex(loginType);
cboLoginModeItemStateChanged(null);
}