Update launch4j to 3.0.2

This commit is contained in:
lizzardo 2012-12-29 08:55:47 -08:00 committed by Fred Cooke
parent 3a3cf58e79
commit fbe42caf62
30 changed files with 1328 additions and 1298 deletions

View File

@ -1,7 +1,7 @@
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2008 Grzegorz Kowal
Copyright (c) 2004, 2011 Grzegorz Kowal
All rights reserved.

View File

@ -1 +1 @@
The current version is 3.0.1
The current version is 3.0.2

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,23 +1,23 @@
Copyright (c) 2004, 2007 Grzegorz Kowal
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
Except as contained in this notice, the name(s) of the above copyright holders
shall not be used in advertising or otherwise to promote the sale, use or other
dealings in this Software without prior written authorization.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
Copyright (c) 2004, 2007 Grzegorz Kowal
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
Except as contained in this notice, the name(s) of the above copyright holders
shall not be used in advertising or otherwise to promote the sale, use or other
dealings in this Software without prior written authorization.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

Binary file not shown.

View File

@ -1,23 +1,23 @@
Copyright (c) 2004, 2008 Grzegorz Kowal
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
Except as contained in this notice, the name(s) of the above copyright holders
shall not be used in advertising or otherwise to promote the sale, use or other
dealings in this Software without prior written authorization.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
Copyright (c) 2004, 2011 Grzegorz Kowal
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
Except as contained in this notice, the name(s) of the above copyright holders
shall not be used in advertising or otherwise to promote the sale, use or other
dealings in this Software without prior written authorization.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@ -446,7 +446,7 @@ BOOL expandVars(char *dst, const char *src, const char *exePath, const int pathL
*varName = 0;
strncat(varName, start + 1, end - start - 1);
// Remember value start for logging
char *varValue = dst + strlen(dst);
char *currentVarValue = dst + strlen(dst);
if (strcmp(varName, "EXEDIR") == 0) {
strncat(dst, exePath, pathLen);
} else if (strcmp(varName, "EXEFILE") == 0) {
@ -460,7 +460,7 @@ BOOL expandVars(char *dst, const char *src, const char *exePath, const int pathL
} else if (GetEnvironmentVariable(varName, varValue, MAX_VAR_SIZE) > 0) {
strcat(dst, varValue);
}
debug("Substitute:\t%s = %s\n", varName, varValue);
debug("Substitute:\t%s = %s\n", varName, currentVarValue);
src = end + 1;
} else {
// Copy remaining content
@ -485,12 +485,19 @@ void appendHeapSizes(char *dst) {
void appendHeapSize(char *dst, const int absID, const int percentID,
const DWORD freeMemory, const char *option) {
const int mb = 1048576; // 1 MB
const int mb = 1048576; // 1 MB
const int mbLimit32 = 1500; // Max heap size in MB on 32-bit JREs
int abs = loadInt(absID);
int percent = loadInt(percentID);
int free = (long long) freeMemory * percent / (100 * mb); // 100% * 1 MB
int size = free > abs ? free : abs;
if (size > 0) {
if (!(foundJava & KEY_WOW64_64KEY) && size > mbLimit32) {
debug("Heap limit:\tReduced %d MB heap size to 32-bit maximum %d MB\n",
size, mbLimit32);
size = mbLimit32;
}
debug("Heap %s:\t%d MB / %d%%, Free: %d MB, Heap size: %d MB\n",
option, abs, percent, freeMemory / mb, size);
strcat(dst, option);

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
<!-- <requestedExecutionLevel level="highestAvailable" uiAccess="false"/> -->
<!-- <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> -->
</requestedPrivileges>
</security>
</trustInfo>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
<!-- <requestedExecutionLevel level="highestAvailable" uiAccess="false"/> -->
<!-- <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> -->
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

View File

@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*" />
</dependentAssembly>
</dependency>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*" />
</dependentAssembly>
</dependency>
</assembly>

View File

@ -1,2 +1,2 @@
versionNumber=3.0.1.0
version=3.0.1
versionNumber=3.0.2.0
version=3.0.2

View File

@ -2,7 +2,7 @@
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2008 Grzegorz Kowal
Copyright (c) 2004, 2011 Grzegorz Kowal
All rights reserved.
@ -90,7 +90,7 @@ public class Main {
" (http://launch4j.sourceforge.net/)\n" +
"Cross-platform Java application wrapper" +
" for creating Windows native executables.\n\n" +
"Copyright (C) 2004, 2008 Grzegorz Kowal\n\n" +
"Copyright (C) 2004, 2011 Grzegorz Kowal\n\n" +
"Launch4j comes with ABSOLUTELY NO WARRANTY.\n" +
"This is free software, licensed under the BSD License.\n" +
"This product includes software developed by the Apache Software Foundation" +

View File

@ -135,12 +135,17 @@ public class Util {
is.close();
p.waitFor();
if (errLine != -1) {
throw new ExecException(Messages.getString("Util.exec.failed")
+ ": " + cmd, errLine);
StringBuffer sb = new StringBuffer(Messages.getString("Util.exec.failed"));
AppendCommandLine(sb, cmd);
throw new ExecException(sb.toString(), errLine);
}
if (p.exitValue() != 0) {
throw new ExecException(Messages.getString("Util.exec.failed")
+ "(" + p.exitValue() + "): " + cmd);
StringBuffer sb = new StringBuffer(Messages.getString("Util.exec.failed"));
sb.append(" (");
sb.append(p.exitValue());
sb.append(')');
AppendCommandLine(sb, cmd);
throw new ExecException(sb.toString());
}
} catch (IOException e) {
close(is);
@ -150,6 +155,16 @@ public class Util {
throw new ExecException(e);
}
}
private static void AppendCommandLine(StringBuffer sb, String[] cmd) {
sb.append(": ");
for (int i = 0; i < cmd.length; i++) {
sb.append(cmd[i]);
if (i < cmd.length - 1) {
sb.append(' ');
}
}
}
public static void close(final InputStream o) {
if (o != null) {

View File

@ -1,119 +1,119 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2007 Ian Roberts
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on May 10, 2005
*/
package net.sf.launch4j.binding;
import java.awt.Color;
import javax.swing.JComboBox;
import org.apache.commons.beanutils.PropertyUtils;
/**
* @author Copyright (C) 2007 Ian Roberts
*/
public class JComboBoxBinding implements Binding {
private final String _property;
private final JComboBox _combo;
private final int _defaultValue;
private final Color _validColor;
public JComboBoxBinding(String property, JComboBox combo, int defaultValue) {
if (property == null || combo == null) {
throw new NullPointerException();
}
if (property.equals("")
|| combo.getItemCount() == 0
|| defaultValue < 0 || defaultValue >= combo.getItemCount()) {
throw new IllegalArgumentException();
}
_property = property;
_combo = combo;
_defaultValue = defaultValue;
_validColor = combo.getBackground();
}
public String getProperty() {
return _property;
}
public void clear(IValidatable bean) {
select(_defaultValue);
}
public void put(IValidatable bean) {
try {
Integer i = (Integer) PropertyUtils.getProperty(bean, _property);
if (i == null) {
throw new BindingException(
Messages.getString("JComboBoxBinding.property.null"));
}
select(i.intValue());
} catch (Exception e) {
throw new BindingException(e);
}
}
public void get(IValidatable bean) {
try {
PropertyUtils.setProperty(bean, _property, new Integer(_combo.getSelectedIndex()));
return;
} catch (Exception e) {
throw new BindingException(e);
}
}
private void select(int index) {
if (index < 0 || index >= _combo.getItemCount()) {
throw new BindingException(
Messages.getString("JComboBoxBinding.index.out.of.bounds"));
}
_combo.setSelectedIndex(index);
}
public void markValid() {
_combo.setBackground(_validColor);
_combo.requestFocusInWindow();
}
public void markInvalid() {
_combo.setBackground(Binding.INVALID_COLOR);
}
public void setEnabled(boolean enabled) {
_combo.setEnabled(enabled);
}
}
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2007 Ian Roberts
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on May 10, 2005
*/
package net.sf.launch4j.binding;
import java.awt.Color;
import javax.swing.JComboBox;
import org.apache.commons.beanutils.PropertyUtils;
/**
* @author Copyright (C) 2007 Ian Roberts
*/
public class JComboBoxBinding implements Binding {
private final String _property;
private final JComboBox _combo;
private final int _defaultValue;
private final Color _validColor;
public JComboBoxBinding(String property, JComboBox combo, int defaultValue) {
if (property == null || combo == null) {
throw new NullPointerException();
}
if (property.equals("")
|| combo.getItemCount() == 0
|| defaultValue < 0 || defaultValue >= combo.getItemCount()) {
throw new IllegalArgumentException();
}
_property = property;
_combo = combo;
_defaultValue = defaultValue;
_validColor = combo.getBackground();
}
public String getProperty() {
return _property;
}
public void clear(IValidatable bean) {
select(_defaultValue);
}
public void put(IValidatable bean) {
try {
Integer i = (Integer) PropertyUtils.getProperty(bean, _property);
if (i == null) {
throw new BindingException(
Messages.getString("JComboBoxBinding.property.null"));
}
select(i.intValue());
} catch (Exception e) {
throw new BindingException(e);
}
}
public void get(IValidatable bean) {
try {
PropertyUtils.setProperty(bean, _property, new Integer(_combo.getSelectedIndex()));
return;
} catch (Exception e) {
throw new BindingException(e);
}
}
private void select(int index) {
if (index < 0 || index >= _combo.getItemCount()) {
throw new BindingException(
Messages.getString("JComboBoxBinding.index.out.of.bounds"));
}
_combo.setSelectedIndex(index);
}
public void markValid() {
_combo.setBackground(_validColor);
_combo.requestFocusInWindow();
}
public void markInvalid() {
_combo.setBackground(Binding.INVALID_COLOR);
}
public void setEnabled(boolean enabled) {
_combo.setEnabled(enabled);
}
}

View File

@ -1,74 +1,74 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* Created on 2007-09-16
*/
package net.sf.launch4j.config;
import net.sf.launch4j.binding.IValidatable;
import net.sf.launch4j.binding.Validator;
/**
* @author Copyright (C) 2007 Grzegorz Kowal
*/
public class SingleInstance implements IValidatable {
private String mutexName;
private String windowTitle;
public void checkInvariants() {
Validator.checkString(mutexName, Validator.MAX_STR,
"singleInstance.mutexName",
Messages.getString("SingleInstance.mutexName"));
Validator.checkOptString(windowTitle, Validator.MAX_STR,
"singleInstance.windowTitle",
Messages.getString("SingleInstance.windowTitle"));
}
public String getWindowTitle() {
return windowTitle;
}
public void setWindowTitle(String appWindowName) {
this.windowTitle = appWindowName;
}
public String getMutexName() {
return mutexName;
}
public void setMutexName(String mutexName) {
this.mutexName = mutexName;
}
}
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* Created on 2007-09-16
*/
package net.sf.launch4j.config;
import net.sf.launch4j.binding.IValidatable;
import net.sf.launch4j.binding.Validator;
/**
* @author Copyright (C) 2007 Grzegorz Kowal
*/
public class SingleInstance implements IValidatable {
private String mutexName;
private String windowTitle;
public void checkInvariants() {
Validator.checkString(mutexName, Validator.MAX_STR,
"singleInstance.mutexName",
Messages.getString("SingleInstance.mutexName"));
Validator.checkOptString(windowTitle, Validator.MAX_STR,
"singleInstance.windowTitle",
Messages.getString("SingleInstance.windowTitle"));
}
public String getWindowTitle() {
return windowTitle;
}
public void setWindowTitle(String appWindowName) {
this.windowTitle = appWindowName;
}
public String getMutexName() {
return mutexName;
}
public void setMutexName(String mutexName) {
this.mutexName = mutexName;
}
}

View File

@ -1,283 +1,283 @@
package net.sf.launch4j.form;
import com.jeta.forms.components.separator.TitledSeparator;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
public abstract class BasicForm extends JPanel
{
protected final JButton _outfileButton = new JButton();
protected final JLabel _outfileLabel = new JLabel();
protected final JLabel _iconLabel = new JLabel();
protected final JLabel _jarLabel = new JLabel();
protected final JButton _jarButton = new JButton();
protected final JButton _iconButton = new JButton();
protected final JLabel _cmdLineLabel = new JLabel();
protected final JLabel _optionsLabel = new JLabel();
protected final JLabel _chdirLabel = new JLabel();
protected final JLabel _processPriorityLabel = new JLabel();
protected final JRadioButton _normalPriorityRadio = new JRadioButton();
protected final ButtonGroup _buttongroup1 = new ButtonGroup();
protected final JRadioButton _idlePriorityRadio = new JRadioButton();
protected final JRadioButton _highPriorityRadio = new JRadioButton();
protected final JCheckBox _customProcNameCheck = new JCheckBox();
protected final JCheckBox _stayAliveCheck = new JCheckBox();
protected final JTextField _cmdLineField = new JTextField();
protected final JTextField _chdirField = new JTextField();
protected final JTextField _iconField = new JTextField();
protected final JCheckBox _dontWrapJarCheck = new JCheckBox();
protected final JTextField _jarField = new JTextField();
protected final JTextField _outfileField = new JTextField();
protected final JLabel _errorTitleLabel = new JLabel();
protected final JTextField _errorTitleField = new JTextField();
protected final JLabel _downloadUrlLabel = new JLabel();
protected final JTextField _downloadUrlField = new JTextField();
protected final JLabel _supportUrlLabel = new JLabel();
protected final JTextField _supportUrlField = new JTextField();
protected final JTextField _manifestField = new JTextField();
protected final JButton _manifestButton = new JButton();
/**
* Default constructor
*/
public BasicForm()
{
initializePanel();
}
/**
* Adds fill components to empty cells in the first row and first column of the grid.
* This ensures that the grid spacing will be the same as shown in the designer.
* @param cols an array of column indices in the first row where fill components should be added.
* @param rows an array of row indices in the first column where fill components should be added.
*/
void addFillComponents( Container panel, int[] cols, int[] rows )
{
Dimension filler = new Dimension(10,10);
boolean filled_cell_11 = false;
CellConstraints cc = new CellConstraints();
if ( cols.length > 0 && rows.length > 0 )
{
if ( cols[0] == 1 && rows[0] == 1 )
{
/** add a rigid area */
panel.add( Box.createRigidArea( filler ), cc.xy(1,1) );
filled_cell_11 = true;
}
}
for( int index = 0; index < cols.length; index++ )
{
if ( cols[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(cols[index],1) );
}
for( int index = 0; index < rows.length; index++ )
{
if ( rows[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(1,rows[index]) );
}
}
/**
* Helper method to load an image file from the CLASSPATH
* @param imageName the package and name of the file to load relative to the CLASSPATH
* @return an ImageIcon instance with the specified image file
* @throws IllegalArgumentException if the image resource cannot be loaded.
*/
public ImageIcon loadImage( String imageName )
{
try
{
ClassLoader classloader = getClass().getClassLoader();
java.net.URL url = classloader.getResource( imageName );
if ( url != null )
{
ImageIcon icon = new ImageIcon( url );
return icon;
}
}
catch( Exception e )
{
e.printStackTrace();
}
throw new IllegalArgumentException( "Unable to load image: " + imageName );
}
public JPanel createPanel()
{
JPanel jpanel1 = new JPanel();
FormLayout formlayout1 = new FormLayout("FILL:7DLU:NONE,RIGHT:MAX(65DLU;DEFAULT):NONE,FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:7DLU:NONE,FILL:DEFAULT:NONE,FILL:7DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:3DLU:NONE,FILL:26PX:NONE,FILL:7DLU:NONE","CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:9DLU:NONE");
CellConstraints cc = new CellConstraints();
jpanel1.setLayout(formlayout1);
_outfileButton.setIcon(loadImage("images/open16.png"));
_outfileButton.setName("outfileButton");
jpanel1.add(_outfileButton,cc.xy(12,2));
_outfileLabel.setIcon(loadImage("images/asterix.gif"));
_outfileLabel.setName("outfileLabel");
_outfileLabel.setText(Messages.getString("outfile"));
jpanel1.add(_outfileLabel,cc.xy(2,2));
_iconLabel.setName("iconLabel");
_iconLabel.setText(Messages.getString("icon"));
jpanel1.add(_iconLabel,cc.xy(2,10));
_jarLabel.setIcon(loadImage("images/asterix.gif"));
_jarLabel.setName("jarLabel");
_jarLabel.setText(Messages.getString("jar"));
jpanel1.add(_jarLabel,cc.xy(2,4));
_jarButton.setIcon(loadImage("images/open16.png"));
_jarButton.setName("jarButton");
jpanel1.add(_jarButton,cc.xy(12,4));
_iconButton.setIcon(loadImage("images/open16.png"));
_iconButton.setName("iconButton");
jpanel1.add(_iconButton,cc.xy(12,10));
_cmdLineLabel.setName("cmdLineLabel");
_cmdLineLabel.setText(Messages.getString("cmdLine"));
_cmdLineLabel.setToolTipText("");
jpanel1.add(_cmdLineLabel,cc.xy(2,14));
_optionsLabel.setName("optionsLabel");
_optionsLabel.setText(Messages.getString("options"));
jpanel1.add(_optionsLabel,cc.xy(2,18));
_chdirLabel.setName("chdirLabel");
_chdirLabel.setText(Messages.getString("chdir"));
jpanel1.add(_chdirLabel,cc.xy(2,12));
_processPriorityLabel.setName("processPriorityLabel");
_processPriorityLabel.setText(Messages.getString("priority"));
jpanel1.add(_processPriorityLabel,cc.xy(2,16));
_normalPriorityRadio.setActionCommand(Messages.getString("normalPriority"));
_normalPriorityRadio.setName("normalPriorityRadio");
_normalPriorityRadio.setText(Messages.getString("normalPriority"));
_buttongroup1.add(_normalPriorityRadio);
jpanel1.add(_normalPriorityRadio,cc.xy(4,16));
_idlePriorityRadio.setActionCommand(Messages.getString("idlePriority"));
_idlePriorityRadio.setName("idlePriorityRadio");
_idlePriorityRadio.setText(Messages.getString("idlePriority"));
_buttongroup1.add(_idlePriorityRadio);
jpanel1.add(_idlePriorityRadio,cc.xy(6,16));
_highPriorityRadio.setActionCommand(Messages.getString("highPriority"));
_highPriorityRadio.setName("highPriorityRadio");
_highPriorityRadio.setText(Messages.getString("highPriority"));
_buttongroup1.add(_highPriorityRadio);
jpanel1.add(_highPriorityRadio,cc.xy(8,16));
_customProcNameCheck.setActionCommand("Custom process name");
_customProcNameCheck.setName("customProcNameCheck");
_customProcNameCheck.setText(Messages.getString("customProcName"));
jpanel1.add(_customProcNameCheck,cc.xywh(4,18,7,1));
_stayAliveCheck.setActionCommand("Stay alive after launching a GUI application");
_stayAliveCheck.setName("stayAliveCheck");
_stayAliveCheck.setText(Messages.getString("stayAlive"));
jpanel1.add(_stayAliveCheck,cc.xywh(4,20,7,1));
_cmdLineField.setName("cmdLineField");
_cmdLineField.setToolTipText(Messages.getString("cmdLineTip"));
jpanel1.add(_cmdLineField,cc.xywh(4,14,7,1));
_chdirField.setName("chdirField");
_chdirField.setToolTipText(Messages.getString("chdirTip"));
jpanel1.add(_chdirField,cc.xywh(4,12,7,1));
_iconField.setName("iconField");
_iconField.setToolTipText(Messages.getString("iconTip"));
jpanel1.add(_iconField,cc.xywh(4,10,7,1));
_dontWrapJarCheck.setActionCommand("Don't wrap the jar, launch it only");
_dontWrapJarCheck.setName("dontWrapJarCheck");
_dontWrapJarCheck.setText(Messages.getString("dontWrapJar"));
jpanel1.add(_dontWrapJarCheck,cc.xywh(4,6,7,1));
_jarField.setName("jarField");
_jarField.setToolTipText(Messages.getString("jarTip"));
jpanel1.add(_jarField,cc.xywh(4,4,7,1));
_outfileField.setName("outfileField");
_outfileField.setToolTipText(Messages.getString("outfileTip"));
jpanel1.add(_outfileField,cc.xywh(4,2,7,1));
TitledSeparator titledseparator1 = new TitledSeparator();
titledseparator1.setText(Messages.getString("downloadAndSupport"));
jpanel1.add(titledseparator1,cc.xywh(2,22,11,1));
_errorTitleLabel.setName("errorTitleLabel");
_errorTitleLabel.setText(Messages.getString("errorTitle"));
jpanel1.add(_errorTitleLabel,cc.xy(2,24));
_errorTitleField.setName("errorTitleField");
_errorTitleField.setToolTipText(Messages.getString("errorTitleTip"));
jpanel1.add(_errorTitleField,cc.xywh(4,24,7,1));
_downloadUrlLabel.setIcon(loadImage("images/asterix.gif"));
_downloadUrlLabel.setName("downloadUrlLabel");
_downloadUrlLabel.setText(Messages.getString("downloadUrl"));
jpanel1.add(_downloadUrlLabel,cc.xy(2,26));
_downloadUrlField.setName("downloadUrlField");
jpanel1.add(_downloadUrlField,cc.xywh(4,26,7,1));
_supportUrlLabel.setName("supportUrlLabel");
_supportUrlLabel.setText(Messages.getString("supportUrl"));
jpanel1.add(_supportUrlLabel,cc.xy(2,28));
_supportUrlField.setName("supportUrlField");
jpanel1.add(_supportUrlField,cc.xywh(4,28,7,1));
JLabel jlabel1 = new JLabel();
jlabel1.setText(Messages.getString("manifest"));
jpanel1.add(jlabel1,cc.xy(2,8));
_manifestField.setName("manifestField");
_manifestField.setToolTipText(Messages.getString("manifestTip"));
jpanel1.add(_manifestField,cc.xywh(4,8,7,1));
_manifestButton.setIcon(loadImage("images/open16.png"));
_manifestButton.setName("manifestButton");
jpanel1.add(_manifestButton,cc.xy(12,8));
addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29 });
return jpanel1;
}
/**
* Initializer
*/
protected void initializePanel()
{
setLayout(new BorderLayout());
add(createPanel(), BorderLayout.CENTER);
}
}
package net.sf.launch4j.form;
import com.jeta.forms.components.separator.TitledSeparator;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
public abstract class BasicForm extends JPanel
{
protected final JButton _outfileButton = new JButton();
protected final JLabel _outfileLabel = new JLabel();
protected final JLabel _iconLabel = new JLabel();
protected final JLabel _jarLabel = new JLabel();
protected final JButton _jarButton = new JButton();
protected final JButton _iconButton = new JButton();
protected final JLabel _cmdLineLabel = new JLabel();
protected final JLabel _optionsLabel = new JLabel();
protected final JLabel _chdirLabel = new JLabel();
protected final JLabel _processPriorityLabel = new JLabel();
protected final JRadioButton _normalPriorityRadio = new JRadioButton();
protected final ButtonGroup _buttongroup1 = new ButtonGroup();
protected final JRadioButton _idlePriorityRadio = new JRadioButton();
protected final JRadioButton _highPriorityRadio = new JRadioButton();
protected final JCheckBox _customProcNameCheck = new JCheckBox();
protected final JCheckBox _stayAliveCheck = new JCheckBox();
protected final JTextField _cmdLineField = new JTextField();
protected final JTextField _chdirField = new JTextField();
protected final JTextField _iconField = new JTextField();
protected final JCheckBox _dontWrapJarCheck = new JCheckBox();
protected final JTextField _jarField = new JTextField();
protected final JTextField _outfileField = new JTextField();
protected final JLabel _errorTitleLabel = new JLabel();
protected final JTextField _errorTitleField = new JTextField();
protected final JLabel _downloadUrlLabel = new JLabel();
protected final JTextField _downloadUrlField = new JTextField();
protected final JLabel _supportUrlLabel = new JLabel();
protected final JTextField _supportUrlField = new JTextField();
protected final JTextField _manifestField = new JTextField();
protected final JButton _manifestButton = new JButton();
/**
* Default constructor
*/
public BasicForm()
{
initializePanel();
}
/**
* Adds fill components to empty cells in the first row and first column of the grid.
* This ensures that the grid spacing will be the same as shown in the designer.
* @param cols an array of column indices in the first row where fill components should be added.
* @param rows an array of row indices in the first column where fill components should be added.
*/
void addFillComponents( Container panel, int[] cols, int[] rows )
{
Dimension filler = new Dimension(10,10);
boolean filled_cell_11 = false;
CellConstraints cc = new CellConstraints();
if ( cols.length > 0 && rows.length > 0 )
{
if ( cols[0] == 1 && rows[0] == 1 )
{
/** add a rigid area */
panel.add( Box.createRigidArea( filler ), cc.xy(1,1) );
filled_cell_11 = true;
}
}
for( int index = 0; index < cols.length; index++ )
{
if ( cols[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(cols[index],1) );
}
for( int index = 0; index < rows.length; index++ )
{
if ( rows[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(1,rows[index]) );
}
}
/**
* Helper method to load an image file from the CLASSPATH
* @param imageName the package and name of the file to load relative to the CLASSPATH
* @return an ImageIcon instance with the specified image file
* @throws IllegalArgumentException if the image resource cannot be loaded.
*/
public ImageIcon loadImage( String imageName )
{
try
{
ClassLoader classloader = getClass().getClassLoader();
java.net.URL url = classloader.getResource( imageName );
if ( url != null )
{
ImageIcon icon = new ImageIcon( url );
return icon;
}
}
catch( Exception e )
{
e.printStackTrace();
}
throw new IllegalArgumentException( "Unable to load image: " + imageName );
}
public JPanel createPanel()
{
JPanel jpanel1 = new JPanel();
FormLayout formlayout1 = new FormLayout("FILL:7DLU:NONE,RIGHT:MAX(65DLU;DEFAULT):NONE,FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:7DLU:NONE,FILL:DEFAULT:NONE,FILL:7DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:3DLU:NONE,FILL:26PX:NONE,FILL:7DLU:NONE","CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:9DLU:NONE");
CellConstraints cc = new CellConstraints();
jpanel1.setLayout(formlayout1);
_outfileButton.setIcon(loadImage("images/open16.png"));
_outfileButton.setName("outfileButton");
jpanel1.add(_outfileButton,cc.xy(12,2));
_outfileLabel.setIcon(loadImage("images/asterix.gif"));
_outfileLabel.setName("outfileLabel");
_outfileLabel.setText(Messages.getString("outfile"));
jpanel1.add(_outfileLabel,cc.xy(2,2));
_iconLabel.setName("iconLabel");
_iconLabel.setText(Messages.getString("icon"));
jpanel1.add(_iconLabel,cc.xy(2,10));
_jarLabel.setIcon(loadImage("images/asterix.gif"));
_jarLabel.setName("jarLabel");
_jarLabel.setText(Messages.getString("jar"));
jpanel1.add(_jarLabel,cc.xy(2,4));
_jarButton.setIcon(loadImage("images/open16.png"));
_jarButton.setName("jarButton");
jpanel1.add(_jarButton,cc.xy(12,4));
_iconButton.setIcon(loadImage("images/open16.png"));
_iconButton.setName("iconButton");
jpanel1.add(_iconButton,cc.xy(12,10));
_cmdLineLabel.setName("cmdLineLabel");
_cmdLineLabel.setText(Messages.getString("cmdLine"));
_cmdLineLabel.setToolTipText("");
jpanel1.add(_cmdLineLabel,cc.xy(2,14));
_optionsLabel.setName("optionsLabel");
_optionsLabel.setText(Messages.getString("options"));
jpanel1.add(_optionsLabel,cc.xy(2,18));
_chdirLabel.setName("chdirLabel");
_chdirLabel.setText(Messages.getString("chdir"));
jpanel1.add(_chdirLabel,cc.xy(2,12));
_processPriorityLabel.setName("processPriorityLabel");
_processPriorityLabel.setText(Messages.getString("priority"));
jpanel1.add(_processPriorityLabel,cc.xy(2,16));
_normalPriorityRadio.setActionCommand(Messages.getString("normalPriority"));
_normalPriorityRadio.setName("normalPriorityRadio");
_normalPriorityRadio.setText(Messages.getString("normalPriority"));
_buttongroup1.add(_normalPriorityRadio);
jpanel1.add(_normalPriorityRadio,cc.xy(4,16));
_idlePriorityRadio.setActionCommand(Messages.getString("idlePriority"));
_idlePriorityRadio.setName("idlePriorityRadio");
_idlePriorityRadio.setText(Messages.getString("idlePriority"));
_buttongroup1.add(_idlePriorityRadio);
jpanel1.add(_idlePriorityRadio,cc.xy(6,16));
_highPriorityRadio.setActionCommand(Messages.getString("highPriority"));
_highPriorityRadio.setName("highPriorityRadio");
_highPriorityRadio.setText(Messages.getString("highPriority"));
_buttongroup1.add(_highPriorityRadio);
jpanel1.add(_highPriorityRadio,cc.xy(8,16));
_customProcNameCheck.setActionCommand("Custom process name");
_customProcNameCheck.setName("customProcNameCheck");
_customProcNameCheck.setText(Messages.getString("customProcName"));
jpanel1.add(_customProcNameCheck,cc.xywh(4,18,7,1));
_stayAliveCheck.setActionCommand("Stay alive after launching a GUI application");
_stayAliveCheck.setName("stayAliveCheck");
_stayAliveCheck.setText(Messages.getString("stayAlive"));
jpanel1.add(_stayAliveCheck,cc.xywh(4,20,7,1));
_cmdLineField.setName("cmdLineField");
_cmdLineField.setToolTipText(Messages.getString("cmdLineTip"));
jpanel1.add(_cmdLineField,cc.xywh(4,14,7,1));
_chdirField.setName("chdirField");
_chdirField.setToolTipText(Messages.getString("chdirTip"));
jpanel1.add(_chdirField,cc.xywh(4,12,7,1));
_iconField.setName("iconField");
_iconField.setToolTipText(Messages.getString("iconTip"));
jpanel1.add(_iconField,cc.xywh(4,10,7,1));
_dontWrapJarCheck.setActionCommand("Don't wrap the jar, launch it only");
_dontWrapJarCheck.setName("dontWrapJarCheck");
_dontWrapJarCheck.setText(Messages.getString("dontWrapJar"));
jpanel1.add(_dontWrapJarCheck,cc.xywh(4,6,7,1));
_jarField.setName("jarField");
_jarField.setToolTipText(Messages.getString("jarTip"));
jpanel1.add(_jarField,cc.xywh(4,4,7,1));
_outfileField.setName("outfileField");
_outfileField.setToolTipText(Messages.getString("outfileTip"));
jpanel1.add(_outfileField,cc.xywh(4,2,7,1));
TitledSeparator titledseparator1 = new TitledSeparator();
titledseparator1.setText(Messages.getString("downloadAndSupport"));
jpanel1.add(titledseparator1,cc.xywh(2,22,11,1));
_errorTitleLabel.setName("errorTitleLabel");
_errorTitleLabel.setText(Messages.getString("errorTitle"));
jpanel1.add(_errorTitleLabel,cc.xy(2,24));
_errorTitleField.setName("errorTitleField");
_errorTitleField.setToolTipText(Messages.getString("errorTitleTip"));
jpanel1.add(_errorTitleField,cc.xywh(4,24,7,1));
_downloadUrlLabel.setIcon(loadImage("images/asterix.gif"));
_downloadUrlLabel.setName("downloadUrlLabel");
_downloadUrlLabel.setText(Messages.getString("downloadUrl"));
jpanel1.add(_downloadUrlLabel,cc.xy(2,26));
_downloadUrlField.setName("downloadUrlField");
jpanel1.add(_downloadUrlField,cc.xywh(4,26,7,1));
_supportUrlLabel.setName("supportUrlLabel");
_supportUrlLabel.setText(Messages.getString("supportUrl"));
jpanel1.add(_supportUrlLabel,cc.xy(2,28));
_supportUrlField.setName("supportUrlField");
jpanel1.add(_supportUrlField,cc.xywh(4,28,7,1));
JLabel jlabel1 = new JLabel();
jlabel1.setText(Messages.getString("manifest"));
jpanel1.add(jlabel1,cc.xy(2,8));
_manifestField.setName("manifestField");
_manifestField.setToolTipText(Messages.getString("manifestTip"));
jpanel1.add(_manifestField,cc.xywh(4,8,7,1));
_manifestButton.setIcon(loadImage("images/open16.png"));
_manifestButton.setName("manifestButton");
jpanel1.add(_manifestButton,cc.xy(12,8));
addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29 });
return jpanel1;
}
/**
* Initializer
*/
protected void initializePanel()
{
setLayout(new BorderLayout());
add(createPanel(), BorderLayout.CENTER);
}
}

View File

@ -1,266 +1,266 @@
package net.sf.launch4j.form;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public abstract class JreForm extends JPanel
{
protected final JLabel _jrePathLabel = new JLabel();
protected final JLabel _jreMinLabel = new JLabel();
protected final JLabel _jreMaxLabel = new JLabel();
protected final JLabel _jvmOptionsTextLabel = new JLabel();
protected final JTextField _jrePathField = new JTextField();
protected final JTextField _jreMinField = new JTextField();
protected final JTextField _jreMaxField = new JTextField();
protected final JTextArea _jvmOptionsTextArea = new JTextArea();
protected final JLabel _initialHeapSizeLabel = new JLabel();
protected final JLabel _maxHeapSizeLabel = new JLabel();
protected final JTextField _initialHeapSizeField = new JTextField();
protected final JTextField _maxHeapSizeField = new JTextField();
protected final JComboBox _varCombo = new JComboBox();
protected final JButton _propertyButton = new JButton();
protected final JButton _optionButton = new JButton();
protected final JButton _envPropertyButton = new JButton();
protected final JButton _envOptionButton = new JButton();
protected final JTextField _envVarField = new JTextField();
protected final JTextField _maxHeapPercentField = new JTextField();
protected final JTextField _initialHeapPercentField = new JTextField();
protected final JComboBox _jdkPreferenceCombo = new JComboBox();
/**
* Default constructor
*/
public JreForm()
{
initializePanel();
}
/**
* Adds fill components to empty cells in the first row and first column of the grid.
* This ensures that the grid spacing will be the same as shown in the designer.
* @param cols an array of column indices in the first row where fill components should be added.
* @param rows an array of row indices in the first column where fill components should be added.
*/
void addFillComponents( Container panel, int[] cols, int[] rows )
{
Dimension filler = new Dimension(10,10);
boolean filled_cell_11 = false;
CellConstraints cc = new CellConstraints();
if ( cols.length > 0 && rows.length > 0 )
{
if ( cols[0] == 1 && rows[0] == 1 )
{
/** add a rigid area */
panel.add( Box.createRigidArea( filler ), cc.xy(1,1) );
filled_cell_11 = true;
}
}
for( int index = 0; index < cols.length; index++ )
{
if ( cols[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(cols[index],1) );
}
for( int index = 0; index < rows.length; index++ )
{
if ( rows[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(1,rows[index]) );
}
}
/**
* Helper method to load an image file from the CLASSPATH
* @param imageName the package and name of the file to load relative to the CLASSPATH
* @return an ImageIcon instance with the specified image file
* @throws IllegalArgumentException if the image resource cannot be loaded.
*/
public ImageIcon loadImage( String imageName )
{
try
{
ClassLoader classloader = getClass().getClassLoader();
java.net.URL url = classloader.getResource( imageName );
if ( url != null )
{
ImageIcon icon = new ImageIcon( url );
return icon;
}
}
catch( Exception e )
{
e.printStackTrace();
}
throw new IllegalArgumentException( "Unable to load image: " + imageName );
}
public JPanel createPanel()
{
JPanel jpanel1 = new JPanel();
FormLayout formlayout1 = new FormLayout("FILL:7DLU:NONE,RIGHT:MAX(65DLU;DEFAULT):NONE,FILL:3DLU:NONE,FILL:60DLU:NONE,FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:7DLU:NONE,FILL:60DLU:NONE,FILL:3DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:7DLU:NONE","CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,FILL:50DLU:GROW(1.0),CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:9DLU:NONE");
CellConstraints cc = new CellConstraints();
jpanel1.setLayout(formlayout1);
_jrePathLabel.setName("jrePathLabel");
_jrePathLabel.setText(Messages.getString("jrePath"));
jpanel1.add(_jrePathLabel,cc.xy(2,2));
_jreMinLabel.setName("jreMinLabel");
_jreMinLabel.setText(Messages.getString("jreMin"));
jpanel1.add(_jreMinLabel,cc.xy(2,4));
_jreMaxLabel.setName("jreMaxLabel");
_jreMaxLabel.setText(Messages.getString("jreMax"));
jpanel1.add(_jreMaxLabel,cc.xy(2,6));
_jvmOptionsTextLabel.setName("jvmOptionsTextLabel");
_jvmOptionsTextLabel.setText(Messages.getString("jvmOptions"));
jpanel1.add(_jvmOptionsTextLabel,new CellConstraints(2,12,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
_jrePathField.setName("jrePathField");
_jrePathField.setToolTipText(Messages.getString("jrePathTip"));
jpanel1.add(_jrePathField,cc.xywh(4,2,7,1));
_jreMinField.setName("jreMinField");
jpanel1.add(_jreMinField,cc.xy(4,4));
_jreMaxField.setName("jreMaxField");
jpanel1.add(_jreMaxField,cc.xy(4,6));
_jvmOptionsTextArea.setName("jvmOptionsTextArea");
_jvmOptionsTextArea.setToolTipText(Messages.getString("jvmOptionsTip"));
JScrollPane jscrollpane1 = new JScrollPane();
jscrollpane1.setViewportView(_jvmOptionsTextArea);
jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jpanel1.add(jscrollpane1,cc.xywh(4,12,7,1));
_initialHeapSizeLabel.setName("initialHeapSizeLabel");
_initialHeapSizeLabel.setText(Messages.getString("initialHeapSize"));
jpanel1.add(_initialHeapSizeLabel,cc.xy(2,8));
_maxHeapSizeLabel.setName("maxHeapSizeLabel");
_maxHeapSizeLabel.setText(Messages.getString("maxHeapSize"));
jpanel1.add(_maxHeapSizeLabel,cc.xy(2,10));
JLabel jlabel1 = new JLabel();
jlabel1.setText("MB");
jpanel1.add(jlabel1,cc.xy(6,8));
JLabel jlabel2 = new JLabel();
jlabel2.setText("MB");
jpanel1.add(jlabel2,cc.xy(6,10));
_initialHeapSizeField.setName("initialHeapSizeField");
jpanel1.add(_initialHeapSizeField,cc.xy(4,8));
_maxHeapSizeField.setName("maxHeapSizeField");
jpanel1.add(_maxHeapSizeField,cc.xy(4,10));
jpanel1.add(createPanel1(),cc.xywh(2,14,9,1));
_maxHeapPercentField.setName("maxHeapPercentField");
jpanel1.add(_maxHeapPercentField,cc.xy(8,10));
_initialHeapPercentField.setName("initialHeapPercentField");
jpanel1.add(_initialHeapPercentField,cc.xy(8,8));
_jdkPreferenceCombo.setName("jdkPreferenceCombo");
jpanel1.add(_jdkPreferenceCombo,cc.xywh(8,4,3,1));
JLabel jlabel3 = new JLabel();
jlabel3.setText(Messages.getString("freeMemory"));
jpanel1.add(jlabel3,cc.xy(10,8));
JLabel jlabel4 = new JLabel();
jlabel4.setText(Messages.getString("freeMemory"));
jpanel1.add(jlabel4,cc.xy(10,10));
addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8,9,10,11 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 });
return jpanel1;
}
public JPanel createPanel1()
{
JPanel jpanel1 = new JPanel();
FormLayout formlayout1 = new FormLayout("RIGHT:MAX(65DLU;DEFAULT):NONE,FILL:3DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:3DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE");
CellConstraints cc = new CellConstraints();
jpanel1.setLayout(formlayout1);
_varCombo.setName("varCombo");
jpanel1.add(_varCombo,cc.xy(3,1));
_propertyButton.setActionCommand("Add");
_propertyButton.setIcon(loadImage("images/edit_add16.png"));
_propertyButton.setName("propertyButton");
_propertyButton.setText(Messages.getString("property"));
_propertyButton.setToolTipText(Messages.getString("propertyTip"));
jpanel1.add(_propertyButton,cc.xy(5,1));
_optionButton.setActionCommand("Add");
_optionButton.setIcon(loadImage("images/edit_add16.png"));
_optionButton.setName("optionButton");
_optionButton.setText(Messages.getString("option"));
_optionButton.setToolTipText(Messages.getString("optionTip"));
jpanel1.add(_optionButton,cc.xy(7,1));
_envPropertyButton.setActionCommand("Add");
_envPropertyButton.setIcon(loadImage("images/edit_add16.png"));
_envPropertyButton.setName("envPropertyButton");
_envPropertyButton.setText(Messages.getString("property"));
_envPropertyButton.setToolTipText(Messages.getString("propertyTip"));
jpanel1.add(_envPropertyButton,cc.xy(5,3));
JLabel jlabel1 = new JLabel();
jlabel1.setText(Messages.getString("varsAndRegistry"));
jpanel1.add(jlabel1,cc.xy(1,1));
JLabel jlabel2 = new JLabel();
jlabel2.setIcon(loadImage("images/asterix.gif"));
jlabel2.setText(Messages.getString("envVar"));
jpanel1.add(jlabel2,cc.xy(1,3));
_envOptionButton.setActionCommand("Add");
_envOptionButton.setIcon(loadImage("images/edit_add16.png"));
_envOptionButton.setName("envOptionButton");
_envOptionButton.setText(Messages.getString("option"));
_envOptionButton.setToolTipText(Messages.getString("optionTip"));
jpanel1.add(_envOptionButton,cc.xy(7,3));
_envVarField.setName("envVarField");
jpanel1.add(_envVarField,cc.xy(3,3));
addFillComponents(jpanel1,new int[]{ 2,4,6 },new int[]{ 2 });
return jpanel1;
}
/**
* Initializer
*/
protected void initializePanel()
{
setLayout(new BorderLayout());
add(createPanel(), BorderLayout.CENTER);
}
}
package net.sf.launch4j.form;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public abstract class JreForm extends JPanel
{
protected final JLabel _jrePathLabel = new JLabel();
protected final JLabel _jreMinLabel = new JLabel();
protected final JLabel _jreMaxLabel = new JLabel();
protected final JLabel _jvmOptionsTextLabel = new JLabel();
protected final JTextField _jrePathField = new JTextField();
protected final JTextField _jreMinField = new JTextField();
protected final JTextField _jreMaxField = new JTextField();
protected final JTextArea _jvmOptionsTextArea = new JTextArea();
protected final JLabel _initialHeapSizeLabel = new JLabel();
protected final JLabel _maxHeapSizeLabel = new JLabel();
protected final JTextField _initialHeapSizeField = new JTextField();
protected final JTextField _maxHeapSizeField = new JTextField();
protected final JComboBox _varCombo = new JComboBox();
protected final JButton _propertyButton = new JButton();
protected final JButton _optionButton = new JButton();
protected final JButton _envPropertyButton = new JButton();
protected final JButton _envOptionButton = new JButton();
protected final JTextField _envVarField = new JTextField();
protected final JTextField _maxHeapPercentField = new JTextField();
protected final JTextField _initialHeapPercentField = new JTextField();
protected final JComboBox _jdkPreferenceCombo = new JComboBox();
/**
* Default constructor
*/
public JreForm()
{
initializePanel();
}
/**
* Adds fill components to empty cells in the first row and first column of the grid.
* This ensures that the grid spacing will be the same as shown in the designer.
* @param cols an array of column indices in the first row where fill components should be added.
* @param rows an array of row indices in the first column where fill components should be added.
*/
void addFillComponents( Container panel, int[] cols, int[] rows )
{
Dimension filler = new Dimension(10,10);
boolean filled_cell_11 = false;
CellConstraints cc = new CellConstraints();
if ( cols.length > 0 && rows.length > 0 )
{
if ( cols[0] == 1 && rows[0] == 1 )
{
/** add a rigid area */
panel.add( Box.createRigidArea( filler ), cc.xy(1,1) );
filled_cell_11 = true;
}
}
for( int index = 0; index < cols.length; index++ )
{
if ( cols[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(cols[index],1) );
}
for( int index = 0; index < rows.length; index++ )
{
if ( rows[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(1,rows[index]) );
}
}
/**
* Helper method to load an image file from the CLASSPATH
* @param imageName the package and name of the file to load relative to the CLASSPATH
* @return an ImageIcon instance with the specified image file
* @throws IllegalArgumentException if the image resource cannot be loaded.
*/
public ImageIcon loadImage( String imageName )
{
try
{
ClassLoader classloader = getClass().getClassLoader();
java.net.URL url = classloader.getResource( imageName );
if ( url != null )
{
ImageIcon icon = new ImageIcon( url );
return icon;
}
}
catch( Exception e )
{
e.printStackTrace();
}
throw new IllegalArgumentException( "Unable to load image: " + imageName );
}
public JPanel createPanel()
{
JPanel jpanel1 = new JPanel();
FormLayout formlayout1 = new FormLayout("FILL:7DLU:NONE,RIGHT:MAX(65DLU;DEFAULT):NONE,FILL:3DLU:NONE,FILL:60DLU:NONE,FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:7DLU:NONE,FILL:60DLU:NONE,FILL:3DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:7DLU:NONE","CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,FILL:50DLU:GROW(1.0),CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:9DLU:NONE");
CellConstraints cc = new CellConstraints();
jpanel1.setLayout(formlayout1);
_jrePathLabel.setName("jrePathLabel");
_jrePathLabel.setText(Messages.getString("jrePath"));
jpanel1.add(_jrePathLabel,cc.xy(2,2));
_jreMinLabel.setName("jreMinLabel");
_jreMinLabel.setText(Messages.getString("jreMin"));
jpanel1.add(_jreMinLabel,cc.xy(2,4));
_jreMaxLabel.setName("jreMaxLabel");
_jreMaxLabel.setText(Messages.getString("jreMax"));
jpanel1.add(_jreMaxLabel,cc.xy(2,6));
_jvmOptionsTextLabel.setName("jvmOptionsTextLabel");
_jvmOptionsTextLabel.setText(Messages.getString("jvmOptions"));
jpanel1.add(_jvmOptionsTextLabel,new CellConstraints(2,12,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
_jrePathField.setName("jrePathField");
_jrePathField.setToolTipText(Messages.getString("jrePathTip"));
jpanel1.add(_jrePathField,cc.xywh(4,2,7,1));
_jreMinField.setName("jreMinField");
jpanel1.add(_jreMinField,cc.xy(4,4));
_jreMaxField.setName("jreMaxField");
jpanel1.add(_jreMaxField,cc.xy(4,6));
_jvmOptionsTextArea.setName("jvmOptionsTextArea");
_jvmOptionsTextArea.setToolTipText(Messages.getString("jvmOptionsTip"));
JScrollPane jscrollpane1 = new JScrollPane();
jscrollpane1.setViewportView(_jvmOptionsTextArea);
jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jpanel1.add(jscrollpane1,cc.xywh(4,12,7,1));
_initialHeapSizeLabel.setName("initialHeapSizeLabel");
_initialHeapSizeLabel.setText(Messages.getString("initialHeapSize"));
jpanel1.add(_initialHeapSizeLabel,cc.xy(2,8));
_maxHeapSizeLabel.setName("maxHeapSizeLabel");
_maxHeapSizeLabel.setText(Messages.getString("maxHeapSize"));
jpanel1.add(_maxHeapSizeLabel,cc.xy(2,10));
JLabel jlabel1 = new JLabel();
jlabel1.setText("MB");
jpanel1.add(jlabel1,cc.xy(6,8));
JLabel jlabel2 = new JLabel();
jlabel2.setText("MB");
jpanel1.add(jlabel2,cc.xy(6,10));
_initialHeapSizeField.setName("initialHeapSizeField");
jpanel1.add(_initialHeapSizeField,cc.xy(4,8));
_maxHeapSizeField.setName("maxHeapSizeField");
jpanel1.add(_maxHeapSizeField,cc.xy(4,10));
jpanel1.add(createPanel1(),cc.xywh(2,14,9,1));
_maxHeapPercentField.setName("maxHeapPercentField");
jpanel1.add(_maxHeapPercentField,cc.xy(8,10));
_initialHeapPercentField.setName("initialHeapPercentField");
jpanel1.add(_initialHeapPercentField,cc.xy(8,8));
_jdkPreferenceCombo.setName("jdkPreferenceCombo");
jpanel1.add(_jdkPreferenceCombo,cc.xywh(8,4,3,1));
JLabel jlabel3 = new JLabel();
jlabel3.setText(Messages.getString("freeMemory"));
jpanel1.add(jlabel3,cc.xy(10,8));
JLabel jlabel4 = new JLabel();
jlabel4.setText(Messages.getString("freeMemory"));
jpanel1.add(jlabel4,cc.xy(10,10));
addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8,9,10,11 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 });
return jpanel1;
}
public JPanel createPanel1()
{
JPanel jpanel1 = new JPanel();
FormLayout formlayout1 = new FormLayout("RIGHT:MAX(65DLU;DEFAULT):NONE,FILL:3DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:3DLU:NONE,FILL:DEFAULT:NONE","CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE");
CellConstraints cc = new CellConstraints();
jpanel1.setLayout(formlayout1);
_varCombo.setName("varCombo");
jpanel1.add(_varCombo,cc.xy(3,1));
_propertyButton.setActionCommand("Add");
_propertyButton.setIcon(loadImage("images/edit_add16.png"));
_propertyButton.setName("propertyButton");
_propertyButton.setText(Messages.getString("property"));
_propertyButton.setToolTipText(Messages.getString("propertyTip"));
jpanel1.add(_propertyButton,cc.xy(5,1));
_optionButton.setActionCommand("Add");
_optionButton.setIcon(loadImage("images/edit_add16.png"));
_optionButton.setName("optionButton");
_optionButton.setText(Messages.getString("option"));
_optionButton.setToolTipText(Messages.getString("optionTip"));
jpanel1.add(_optionButton,cc.xy(7,1));
_envPropertyButton.setActionCommand("Add");
_envPropertyButton.setIcon(loadImage("images/edit_add16.png"));
_envPropertyButton.setName("envPropertyButton");
_envPropertyButton.setText(Messages.getString("property"));
_envPropertyButton.setToolTipText(Messages.getString("propertyTip"));
jpanel1.add(_envPropertyButton,cc.xy(5,3));
JLabel jlabel1 = new JLabel();
jlabel1.setText(Messages.getString("varsAndRegistry"));
jpanel1.add(jlabel1,cc.xy(1,1));
JLabel jlabel2 = new JLabel();
jlabel2.setIcon(loadImage("images/asterix.gif"));
jlabel2.setText(Messages.getString("envVar"));
jpanel1.add(jlabel2,cc.xy(1,3));
_envOptionButton.setActionCommand("Add");
_envOptionButton.setIcon(loadImage("images/edit_add16.png"));
_envOptionButton.setName("envOptionButton");
_envOptionButton.setText(Messages.getString("option"));
_envOptionButton.setToolTipText(Messages.getString("optionTip"));
jpanel1.add(_envOptionButton,cc.xy(7,3));
_envVarField.setName("envVarField");
jpanel1.add(_envVarField,cc.xy(3,3));
addFillComponents(jpanel1,new int[]{ 2,4,6 },new int[]{ 2 });
return jpanel1;
}
/**
* Initializer
*/
protected void initializePanel()
{
setLayout(new BorderLayout());
add(createPanel(), BorderLayout.CENTER);
}
}

View File

@ -1,183 +1,183 @@
package net.sf.launch4j.form;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public abstract class MessagesForm extends JPanel
{
protected final JTextArea _startupErrTextArea = new JTextArea();
protected final JTextArea _bundledJreErrTextArea = new JTextArea();
protected final JTextArea _jreVersionErrTextArea = new JTextArea();
protected final JTextArea _launcherErrTextArea = new JTextArea();
protected final JCheckBox _messagesCheck = new JCheckBox();
protected final JTextArea _instanceAlreadyExistsMsgTextArea = new JTextArea();
/**
* Default constructor
*/
public MessagesForm()
{
initializePanel();
}
/**
* Adds fill components to empty cells in the first row and first column of the grid.
* This ensures that the grid spacing will be the same as shown in the designer.
* @param cols an array of column indices in the first row where fill components should be added.
* @param rows an array of row indices in the first column where fill components should be added.
*/
void addFillComponents( Container panel, int[] cols, int[] rows )
{
Dimension filler = new Dimension(10,10);
boolean filled_cell_11 = false;
CellConstraints cc = new CellConstraints();
if ( cols.length > 0 && rows.length > 0 )
{
if ( cols[0] == 1 && rows[0] == 1 )
{
/** add a rigid area */
panel.add( Box.createRigidArea( filler ), cc.xy(1,1) );
filled_cell_11 = true;
}
}
for( int index = 0; index < cols.length; index++ )
{
if ( cols[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(cols[index],1) );
}
for( int index = 0; index < rows.length; index++ )
{
if ( rows[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(1,rows[index]) );
}
}
/**
* Helper method to load an image file from the CLASSPATH
* @param imageName the package and name of the file to load relative to the CLASSPATH
* @return an ImageIcon instance with the specified image file
* @throws IllegalArgumentException if the image resource cannot be loaded.
*/
public ImageIcon loadImage( String imageName )
{
try
{
ClassLoader classloader = getClass().getClassLoader();
java.net.URL url = classloader.getResource( imageName );
if ( url != null )
{
ImageIcon icon = new ImageIcon( url );
return icon;
}
}
catch( Exception e )
{
e.printStackTrace();
}
throw new IllegalArgumentException( "Unable to load image: " + imageName );
}
public JPanel createPanel()
{
JPanel jpanel1 = new JPanel();
FormLayout formlayout1 = new FormLayout("FILL:7DLU:NONE,RIGHT:MAX(65DLU;DEFAULT):NONE,FILL:3DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:7DLU:NONE","CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:3DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:3DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:3DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:3DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:9DLU:NONE");
CellConstraints cc = new CellConstraints();
jpanel1.setLayout(formlayout1);
_startupErrTextArea.setName("startupErrTextArea");
JScrollPane jscrollpane1 = new JScrollPane();
jscrollpane1.setViewportView(_startupErrTextArea);
jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jpanel1.add(jscrollpane1,cc.xy(4,4));
_bundledJreErrTextArea.setName("bundledJreErrTextArea");
JScrollPane jscrollpane2 = new JScrollPane();
jscrollpane2.setViewportView(_bundledJreErrTextArea);
jscrollpane2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jscrollpane2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jpanel1.add(jscrollpane2,cc.xy(4,6));
_jreVersionErrTextArea.setName("jreVersionErrTextArea");
_jreVersionErrTextArea.setToolTipText(Messages.getString("jreVersionErrTip"));
JScrollPane jscrollpane3 = new JScrollPane();
jscrollpane3.setViewportView(_jreVersionErrTextArea);
jscrollpane3.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jscrollpane3.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jpanel1.add(jscrollpane3,cc.xy(4,8));
_launcherErrTextArea.setName("launcherErrTextArea");
JScrollPane jscrollpane4 = new JScrollPane();
jscrollpane4.setViewportView(_launcherErrTextArea);
jscrollpane4.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jscrollpane4.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jpanel1.add(jscrollpane4,cc.xy(4,10));
JLabel jlabel1 = new JLabel();
jlabel1.setText(Messages.getString("startupErr"));
jpanel1.add(jlabel1,new CellConstraints(2,4,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
JLabel jlabel2 = new JLabel();
jlabel2.setText(Messages.getString("bundledJreErr"));
jpanel1.add(jlabel2,new CellConstraints(2,6,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
JLabel jlabel3 = new JLabel();
jlabel3.setText(Messages.getString("jreVersionErr"));
jpanel1.add(jlabel3,new CellConstraints(2,8,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
JLabel jlabel4 = new JLabel();
jlabel4.setText(Messages.getString("launcherErr"));
jpanel1.add(jlabel4,new CellConstraints(2,10,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
_messagesCheck.setActionCommand("Add version information");
_messagesCheck.setName("messagesCheck");
_messagesCheck.setText(Messages.getString("addMessages"));
jpanel1.add(_messagesCheck,cc.xy(4,2));
JLabel jlabel5 = new JLabel();
jlabel5.setText(Messages.getString("instanceAlreadyExistsMsg"));
jpanel1.add(jlabel5,new CellConstraints(2,12,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
_instanceAlreadyExistsMsgTextArea.setName("instanceAlreadyExistsMsgTextArea");
_instanceAlreadyExistsMsgTextArea.setToolTipText(Messages.getString("instanceAlreadyExistsMsgTip"));
JScrollPane jscrollpane5 = new JScrollPane();
jscrollpane5.setViewportView(_instanceAlreadyExistsMsgTextArea);
jscrollpane5.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jscrollpane5.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jpanel1.add(jscrollpane5,cc.xy(4,12));
addFillComponents(jpanel1,new int[]{ 1,2,3,4,5 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13 });
return jpanel1;
}
/**
* Initializer
*/
protected void initializePanel()
{
setLayout(new BorderLayout());
add(createPanel(), BorderLayout.CENTER);
}
}
package net.sf.launch4j.form;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public abstract class MessagesForm extends JPanel
{
protected final JTextArea _startupErrTextArea = new JTextArea();
protected final JTextArea _bundledJreErrTextArea = new JTextArea();
protected final JTextArea _jreVersionErrTextArea = new JTextArea();
protected final JTextArea _launcherErrTextArea = new JTextArea();
protected final JCheckBox _messagesCheck = new JCheckBox();
protected final JTextArea _instanceAlreadyExistsMsgTextArea = new JTextArea();
/**
* Default constructor
*/
public MessagesForm()
{
initializePanel();
}
/**
* Adds fill components to empty cells in the first row and first column of the grid.
* This ensures that the grid spacing will be the same as shown in the designer.
* @param cols an array of column indices in the first row where fill components should be added.
* @param rows an array of row indices in the first column where fill components should be added.
*/
void addFillComponents( Container panel, int[] cols, int[] rows )
{
Dimension filler = new Dimension(10,10);
boolean filled_cell_11 = false;
CellConstraints cc = new CellConstraints();
if ( cols.length > 0 && rows.length > 0 )
{
if ( cols[0] == 1 && rows[0] == 1 )
{
/** add a rigid area */
panel.add( Box.createRigidArea( filler ), cc.xy(1,1) );
filled_cell_11 = true;
}
}
for( int index = 0; index < cols.length; index++ )
{
if ( cols[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(cols[index],1) );
}
for( int index = 0; index < rows.length; index++ )
{
if ( rows[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(1,rows[index]) );
}
}
/**
* Helper method to load an image file from the CLASSPATH
* @param imageName the package and name of the file to load relative to the CLASSPATH
* @return an ImageIcon instance with the specified image file
* @throws IllegalArgumentException if the image resource cannot be loaded.
*/
public ImageIcon loadImage( String imageName )
{
try
{
ClassLoader classloader = getClass().getClassLoader();
java.net.URL url = classloader.getResource( imageName );
if ( url != null )
{
ImageIcon icon = new ImageIcon( url );
return icon;
}
}
catch( Exception e )
{
e.printStackTrace();
}
throw new IllegalArgumentException( "Unable to load image: " + imageName );
}
public JPanel createPanel()
{
JPanel jpanel1 = new JPanel();
FormLayout formlayout1 = new FormLayout("FILL:7DLU:NONE,RIGHT:MAX(65DLU;DEFAULT):NONE,FILL:3DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:7DLU:NONE","CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:3DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:3DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:3DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:3DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:9DLU:NONE");
CellConstraints cc = new CellConstraints();
jpanel1.setLayout(formlayout1);
_startupErrTextArea.setName("startupErrTextArea");
JScrollPane jscrollpane1 = new JScrollPane();
jscrollpane1.setViewportView(_startupErrTextArea);
jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jpanel1.add(jscrollpane1,cc.xy(4,4));
_bundledJreErrTextArea.setName("bundledJreErrTextArea");
JScrollPane jscrollpane2 = new JScrollPane();
jscrollpane2.setViewportView(_bundledJreErrTextArea);
jscrollpane2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jscrollpane2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jpanel1.add(jscrollpane2,cc.xy(4,6));
_jreVersionErrTextArea.setName("jreVersionErrTextArea");
_jreVersionErrTextArea.setToolTipText(Messages.getString("jreVersionErrTip"));
JScrollPane jscrollpane3 = new JScrollPane();
jscrollpane3.setViewportView(_jreVersionErrTextArea);
jscrollpane3.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jscrollpane3.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jpanel1.add(jscrollpane3,cc.xy(4,8));
_launcherErrTextArea.setName("launcherErrTextArea");
JScrollPane jscrollpane4 = new JScrollPane();
jscrollpane4.setViewportView(_launcherErrTextArea);
jscrollpane4.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jscrollpane4.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jpanel1.add(jscrollpane4,cc.xy(4,10));
JLabel jlabel1 = new JLabel();
jlabel1.setText(Messages.getString("startupErr"));
jpanel1.add(jlabel1,new CellConstraints(2,4,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
JLabel jlabel2 = new JLabel();
jlabel2.setText(Messages.getString("bundledJreErr"));
jpanel1.add(jlabel2,new CellConstraints(2,6,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
JLabel jlabel3 = new JLabel();
jlabel3.setText(Messages.getString("jreVersionErr"));
jpanel1.add(jlabel3,new CellConstraints(2,8,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
JLabel jlabel4 = new JLabel();
jlabel4.setText(Messages.getString("launcherErr"));
jpanel1.add(jlabel4,new CellConstraints(2,10,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
_messagesCheck.setActionCommand("Add version information");
_messagesCheck.setName("messagesCheck");
_messagesCheck.setText(Messages.getString("addMessages"));
jpanel1.add(_messagesCheck,cc.xy(4,2));
JLabel jlabel5 = new JLabel();
jlabel5.setText(Messages.getString("instanceAlreadyExistsMsg"));
jpanel1.add(jlabel5,new CellConstraints(2,12,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
_instanceAlreadyExistsMsgTextArea.setName("instanceAlreadyExistsMsgTextArea");
_instanceAlreadyExistsMsgTextArea.setToolTipText(Messages.getString("instanceAlreadyExistsMsgTip"));
JScrollPane jscrollpane5 = new JScrollPane();
jscrollpane5.setViewportView(_instanceAlreadyExistsMsgTextArea);
jscrollpane5.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jscrollpane5.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jpanel1.add(jscrollpane5,cc.xy(4,12));
addFillComponents(jpanel1,new int[]{ 1,2,3,4,5 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13 });
return jpanel1;
}
/**
* Initializer
*/
protected void initializePanel()
{
setLayout(new BorderLayout());
add(createPanel(), BorderLayout.CENTER);
}
}

View File

@ -1,141 +1,141 @@
package net.sf.launch4j.form;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public abstract class SingleInstanceForm extends JPanel
{
protected final JLabel _splashFileLabel = new JLabel();
protected final JTextField _mutexNameField = new JTextField();
protected final JCheckBox _singleInstanceCheck = new JCheckBox();
protected final JTextField _windowTitleField = new JTextField();
protected final JLabel _splashFileLabel1 = new JLabel();
/**
* Default constructor
*/
public SingleInstanceForm()
{
initializePanel();
}
/**
* Adds fill components to empty cells in the first row and first column of the grid.
* This ensures that the grid spacing will be the same as shown in the designer.
* @param cols an array of column indices in the first row where fill components should be added.
* @param rows an array of row indices in the first column where fill components should be added.
*/
void addFillComponents( Container panel, int[] cols, int[] rows )
{
Dimension filler = new Dimension(10,10);
boolean filled_cell_11 = false;
CellConstraints cc = new CellConstraints();
if ( cols.length > 0 && rows.length > 0 )
{
if ( cols[0] == 1 && rows[0] == 1 )
{
/** add a rigid area */
panel.add( Box.createRigidArea( filler ), cc.xy(1,1) );
filled_cell_11 = true;
}
}
for( int index = 0; index < cols.length; index++ )
{
if ( cols[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(cols[index],1) );
}
for( int index = 0; index < rows.length; index++ )
{
if ( rows[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(1,rows[index]) );
}
}
/**
* Helper method to load an image file from the CLASSPATH
* @param imageName the package and name of the file to load relative to the CLASSPATH
* @return an ImageIcon instance with the specified image file
* @throws IllegalArgumentException if the image resource cannot be loaded.
*/
public ImageIcon loadImage( String imageName )
{
try
{
ClassLoader classloader = getClass().getClassLoader();
java.net.URL url = classloader.getResource( imageName );
if ( url != null )
{
ImageIcon icon = new ImageIcon( url );
return icon;
}
}
catch( Exception e )
{
e.printStackTrace();
}
throw new IllegalArgumentException( "Unable to load image: " + imageName );
}
public JPanel createPanel()
{
JPanel jpanel1 = new JPanel();
FormLayout formlayout1 = new FormLayout("FILL:7DLU:NONE,RIGHT:MAX(65DLU;DEFAULT):NONE,FILL:3DLU:NONE,FILL:60DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:7DLU:NONE","CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:9DLU:NONE");
CellConstraints cc = new CellConstraints();
jpanel1.setLayout(formlayout1);
_splashFileLabel.setIcon(loadImage("images/asterix.gif"));
_splashFileLabel.setName("splashFileLabel");
_splashFileLabel.setText(Messages.getString("mutexName"));
jpanel1.add(_splashFileLabel,cc.xy(2,4));
_mutexNameField.setName("mutexNameField");
_mutexNameField.setToolTipText(Messages.getString("mutexNameTip"));
jpanel1.add(_mutexNameField,cc.xywh(4,4,2,1));
_singleInstanceCheck.setActionCommand("Enable splash screen");
_singleInstanceCheck.setName("singleInstanceCheck");
_singleInstanceCheck.setText(Messages.getString("enableSingleInstance"));
jpanel1.add(_singleInstanceCheck,cc.xywh(4,2,2,1));
_windowTitleField.setName("windowTitleField");
_windowTitleField.setToolTipText(Messages.getString("windowTitleTip"));
jpanel1.add(_windowTitleField,cc.xywh(4,6,2,1));
_splashFileLabel1.setName("splashFileLabel");
_splashFileLabel1.setText(Messages.getString("windowTitle"));
jpanel1.add(_splashFileLabel1,cc.xy(2,6));
addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6 },new int[]{ 1,2,3,4,5,6,7 });
return jpanel1;
}
/**
* Initializer
*/
protected void initializePanel()
{
setLayout(new BorderLayout());
add(createPanel(), BorderLayout.CENTER);
}
}
package net.sf.launch4j.form;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public abstract class SingleInstanceForm extends JPanel
{
protected final JLabel _splashFileLabel = new JLabel();
protected final JTextField _mutexNameField = new JTextField();
protected final JCheckBox _singleInstanceCheck = new JCheckBox();
protected final JTextField _windowTitleField = new JTextField();
protected final JLabel _splashFileLabel1 = new JLabel();
/**
* Default constructor
*/
public SingleInstanceForm()
{
initializePanel();
}
/**
* Adds fill components to empty cells in the first row and first column of the grid.
* This ensures that the grid spacing will be the same as shown in the designer.
* @param cols an array of column indices in the first row where fill components should be added.
* @param rows an array of row indices in the first column where fill components should be added.
*/
void addFillComponents( Container panel, int[] cols, int[] rows )
{
Dimension filler = new Dimension(10,10);
boolean filled_cell_11 = false;
CellConstraints cc = new CellConstraints();
if ( cols.length > 0 && rows.length > 0 )
{
if ( cols[0] == 1 && rows[0] == 1 )
{
/** add a rigid area */
panel.add( Box.createRigidArea( filler ), cc.xy(1,1) );
filled_cell_11 = true;
}
}
for( int index = 0; index < cols.length; index++ )
{
if ( cols[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(cols[index],1) );
}
for( int index = 0; index < rows.length; index++ )
{
if ( rows[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(1,rows[index]) );
}
}
/**
* Helper method to load an image file from the CLASSPATH
* @param imageName the package and name of the file to load relative to the CLASSPATH
* @return an ImageIcon instance with the specified image file
* @throws IllegalArgumentException if the image resource cannot be loaded.
*/
public ImageIcon loadImage( String imageName )
{
try
{
ClassLoader classloader = getClass().getClassLoader();
java.net.URL url = classloader.getResource( imageName );
if ( url != null )
{
ImageIcon icon = new ImageIcon( url );
return icon;
}
}
catch( Exception e )
{
e.printStackTrace();
}
throw new IllegalArgumentException( "Unable to load image: " + imageName );
}
public JPanel createPanel()
{
JPanel jpanel1 = new JPanel();
FormLayout formlayout1 = new FormLayout("FILL:7DLU:NONE,RIGHT:MAX(65DLU;DEFAULT):NONE,FILL:3DLU:NONE,FILL:60DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:7DLU:NONE","CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:9DLU:NONE");
CellConstraints cc = new CellConstraints();
jpanel1.setLayout(formlayout1);
_splashFileLabel.setIcon(loadImage("images/asterix.gif"));
_splashFileLabel.setName("splashFileLabel");
_splashFileLabel.setText(Messages.getString("mutexName"));
jpanel1.add(_splashFileLabel,cc.xy(2,4));
_mutexNameField.setName("mutexNameField");
_mutexNameField.setToolTipText(Messages.getString("mutexNameTip"));
jpanel1.add(_mutexNameField,cc.xywh(4,4,2,1));
_singleInstanceCheck.setActionCommand("Enable splash screen");
_singleInstanceCheck.setName("singleInstanceCheck");
_singleInstanceCheck.setText(Messages.getString("enableSingleInstance"));
jpanel1.add(_singleInstanceCheck,cc.xywh(4,2,2,1));
_windowTitleField.setName("windowTitleField");
_windowTitleField.setToolTipText(Messages.getString("windowTitleTip"));
jpanel1.add(_windowTitleField,cc.xywh(4,6,2,1));
_splashFileLabel1.setName("splashFileLabel");
_splashFileLabel1.setText(Messages.getString("windowTitle"));
jpanel1.add(_splashFileLabel1,cc.xy(2,6));
addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6 },new int[]{ 1,2,3,4,5,6,7 });
return jpanel1;
}
/**
* Initializer
*/
protected void initializePanel()
{
setLayout(new BorderLayout());
add(createPanel(), BorderLayout.CENTER);
}
}

View File

@ -333,7 +333,7 @@ public class MainFrame extends JFrame {
String path = _outfile.getPath();
if (Util.WINDOWS_OS) {
log.append(Messages.getString("MainFrame.executing") + path);
Util.exec(new String[] { path }, log);
Util.exec(new String[] { path, "--l4j-debug" }, log);
} else {
log.append(Messages.getString("MainFrame.jar.integrity.test")
+ path);

View File

@ -1,54 +1,54 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* Created on 2007-09-22
*/
package net.sf.launch4j.formimpl;
import net.sf.launch4j.binding.Bindings;
import net.sf.launch4j.config.SingleInstance;
import net.sf.launch4j.form.SingleInstanceForm;
/**
* @author Copyright (C) 2007 Grzegorz Kowal
*/
public class SingleInstanceFormImpl extends SingleInstanceForm {
public SingleInstanceFormImpl(Bindings bindings) {
bindings.addOptComponent("singleInstance", SingleInstance.class,
_singleInstanceCheck)
.add("singleInstance.mutexName", _mutexNameField)
.add("singleInstance.windowTitle", _windowTitleField);
}
}
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* Created on 2007-09-22
*/
package net.sf.launch4j.formimpl;
import net.sf.launch4j.binding.Bindings;
import net.sf.launch4j.config.SingleInstance;
import net.sf.launch4j.form.SingleInstanceForm;
/**
* @author Copyright (C) 2007 Grzegorz Kowal
*/
public class SingleInstanceFormImpl extends SingleInstanceForm {
public SingleInstanceFormImpl(Bindings bindings) {
bindings.addOptComponent("singleInstance", SingleInstance.class,
_singleInstanceCheck)
.add("singleInstance.mutexName", _mutexNameField)
.add("singleInstance.windowTitle", _windowTitleField);
}
}

View File

@ -11,7 +11,7 @@
<body>
<div id="container">
<div id="top">
<img style="width: 249px; height: 58px;" src="launch4j.gif" alt="launch4j"> <span class="version">3.0.1</span>
<img style="width: 249px; height: 58px;" src="launch4j.gif" alt="launch4j"> <span class="version">3.0.2</span>
</div>
<div id="leftnav">
<ul>
@ -19,8 +19,8 @@
<li><a href="docs.html">Docs</a></li>
<li><a href="changelog.html">Changelog</a></li>
<li><a href="http://sourceforge.net/project/screenshots.php?group_id=95944">Screenshots</a></li>
<li><a href="http://sourceforge.net/project/showfiles.php?group_id=95944&amp;package_id=192323">Download</a></li>
<li><a href="http://sourceforge.net/forum/?group_id=95944">Support</a></li>
<li><a href="http://sourceforge.net/projects/launch4j/files/launch4j-3/3.0.2">Download</a></li>
<li><a href="http://sourceforge.net/projects/launch4j/support">Support</a></li>
<li><a href="http://sourceforge.net/projects/launch4j">Project summary</a></li>
<li><a href="http://sourceforge.net/tracker/?atid=613100&amp;group_id=95944">Bug tracker</a></li>
<li><a href="links.html">Links</a></li>
@ -36,6 +36,14 @@
<div id="content">
<h2>Changelog</h2>
<h4>Changes in version 3.0.2 (02-01-2011)</h4>
<ul class="changes">
<li>Fixed the command line in Exec error message.</li>
<li>Fixed set environment variable bug.</li>
<li>Added wrapper logging to launch4j GUI.</li>
<li>Fixed critical bug: heap size over the limit.</li>
</ul>
<h4>Changes in version 3.0.1 (20-07-2008)</h4>
<ul class="changes">
<li>Enhanced the runtime logging (--l4j-debug).</li>
@ -43,28 +51,28 @@
<li>Fixed bug #1919406, #1989479 Not every option is loaded from saved xml file (found by Robert Lachner, Jan-Philipp Rathje).</li>
<li>Fixed bug #1930222 Simple typo (found by Daniel).</li>
</ul>
<h4>Changes in version 3.0.0 (16-03-2008)</h4>
<ul class="changes">
<li>FR #1390075 Added dynamic initial/max heap values.</li>
<li>FR #1707827 Allow to prefer JDK private runtimes over JREs (Ian Roberts).</li>
<li>FR #1730245 Allow to run only a single aplication instance (Sylvain Mina).</li>
<li>FR #1391610 Added IBM JRE/JDK support.</li>
<li>Added environment variable expansion in bundled JRE path.</li>
<li>Fixed critical bug #1882524 JRE detection problem on 64-bit Windows.</li>
<li>Fixed bug #1758912 Vista elevation to full administrator privileges.</li>
<li>Fixed bug #1784341 Problems with spaces in paths under linux (Michael Piefel).</li>
<li>Fixed bug where /bin was appended to path environment variable instead of jre_path/bin.</li>
</ul>
<h4>Changed license to BSD, MIT (26-01-2008)</h4>
<ul class="changes">
<li>
The upcoming Launch4j 3.0.0 release will be licensed under the much more
liberal new BSD license. The head subproject (the binary header attached to wrapped jars)
will be licensed under the similar MIT license.
</li>
</ul>
<h4>Changes in version 3.0.0 (16-03-2008)</h4>
<ul class="changes">
<li>FR #1390075 Added dynamic initial/max heap values.</li>
<li>FR #1707827 Allow to prefer JDK private runtimes over JREs (Ian Roberts).</li>
<li>FR #1730245 Allow to run only a single aplication instance (Sylvain Mina).</li>
<li>FR #1391610 Added IBM JRE/JDK support.</li>
<li>Added environment variable expansion in bundled JRE path.</li>
<li>Fixed critical bug #1882524 JRE detection problem on 64-bit Windows.</li>
<li>Fixed bug #1758912 Vista elevation to full administrator privileges.</li>
<li>Fixed bug #1784341 Problems with spaces in paths under linux (Michael Piefel).</li>
<li>Fixed bug where /bin was appended to path environment variable instead of jre_path/bin.</li>
</ul>
<h4>Changed license to BSD, MIT (26-01-2008)</h4>
<ul class="changes">
<li>
The upcoming Launch4j 3.0.0 release will be licensed under the much more
liberal new BSD license. The head subproject (the binary header attached to wrapped jars)
will be licensed under the similar MIT license.
</li>
</ul>
<h4>Changes in version 3.0.0-pre2 (29-10-2006)</h4>
<ul class="changes">
@ -342,9 +350,9 @@
<li>Configuration parameter <em>'args'</em> changed to <em>'jvmArgs'</em></li>
</ul>
</div>
<div class="footer">
<div class="footer">
All trademarks mentioned are properties of their respective owners.<br />
Copyright &copy; 2005-2008 Grzegorz Kowal
Copyright &copy; 2005-2011 Grzegorz Kowal
<p style="margin-top: 2em">
<a href="http://sourceforge.net"><img style="width: 125px; height: 37px; border: none" src="http://sourceforge.net/sflogo.php?group_id=95944&amp;type=4" alt="sf.net"></a>
<a href="http://www.nosoftwarepatents.com"><img style="width: 90px; height: 40px; border: none; margin-left: 5%" src="http://www.nosoftwarepatents.com/banners/90x40_3.jpg" alt=""></a>

View File

@ -11,7 +11,7 @@
<body>
<div id="container">
<div id="top">
<img style="width: 249px; height: 58px;" src="launch4j.gif" alt="launch4j"> <span class="version">3.0.1</span>
<img style="width: 249px; height: 58px;" src="launch4j.gif" alt="launch4j"> <span class="version">3.0.2</span>
</div>
<div id="leftnav">
<ul>
@ -19,8 +19,8 @@
<li><a href="docs.html">Docs</a></li>
<li><a href="changelog.html">Changelog</a></li>
<li><a href="http://sourceforge.net/project/screenshots.php?group_id=95944">Screenshots</a></li>
<li><a href="http://sourceforge.net/project/showfiles.php?group_id=95944&amp;package_id=192323">Download</a></li>
<li><a href="http://sourceforge.net/forum/?group_id=95944">Support</a></li>
<li><a href="http://sourceforge.net/projects/launch4j/files/launch4j-3/3.0.2">Download</a></li>
<li><a href="http://sourceforge.net/projects/launch4j/support">Support</a></li>
<li><a href="http://sourceforge.net/projects/launch4j">Project summary</a></li>
<li><a href="http://sourceforge.net/tracker/?atid=613100&amp;group_id=95944">Bug tracker</a></li>
<li><a href="links.html">Links</a></li>
@ -90,10 +90,10 @@ may be absolute paths or relative to the configuration file path.
<strong>&lt;mainClass&gt;</strong><span class="codeword">main class</span><strong>&lt;/mainClass&gt;</strong>
<strong>&lt;cp&gt;</strong><span class="codeword">classpath</span><strong>&lt;/cp&gt;</strong>
...
&lt;/classPath&gt;
&lt;singleInstance&gt;
<strong>&lt;mutexName&gt;</strong><span class="codeword">text</span><strong>&lt;/mutexName&gt;</strong>
&lt;windowTitle&gt;<span class="codeword">text</span>&lt;/windowTitle&gt;
&lt;/classPath&gt;
&lt;singleInstance&gt;
<strong>&lt;mutexName&gt;</strong><span class="codeword">text</span><strong>&lt;/mutexName&gt;</strong>
&lt;windowTitle&gt;<span class="codeword">text</span>&lt;/windowTitle&gt;
&lt;/singleInstance&gt;
<strong>&lt;jre&gt;</strong>
&lt;!-- Specify one of the following or both --&gt;
@ -102,9 +102,9 @@ may be absolute paths or relative to the configuration file path.
&lt;maxVersion&gt;<span class="codeword">x.x.x[_xx]</span>&lt;/maxVersion&gt;
&lt;jdkPreference&gt;<span class="codeword">jreOnly|<u>preferJre</u>|preferJdk|jdkOnly</span>&lt;/jdkPreference&gt;
&lt;!-- Heap sizes in MB and % of free memory --&gt;
&lt;initialHeapSize&gt;<span class="codeword">MB</span>&lt;/initialHeapSize&gt;
&lt;initialHeapSize&gt;<span class="codeword">MB</span>&lt;/initialHeapSize&gt;
&lt;initialHeapPercent&gt;<span class="codeword">%</span>&lt;/initialHeapPercent&gt;
&lt;maxHeapSize&gt;<span class="codeword">MB</span>&lt;/maxHeapSize&gt;
&lt;maxHeapSize&gt;<span class="codeword">MB</span>&lt;/maxHeapSize&gt;
&lt;maxHeapPercent&gt;<span class="codeword">%</span>&lt;/maxHeapPercent&gt;
&lt;opt&gt;<span class="codeword">text</span>&lt;/opt&gt;
...
@ -251,20 +251,20 @@ may be absolute paths or relative to the configuration file path.
<dl>
<dt>&lt;lib&gt;</dt>
<dd>Optional, custom headers only. Ordered list of libraries used by header.</dd>
</dl>
<dl>
<dt>&lt;singleInstance&gt;</dt>
<dd>Optional, allow to run only a single instance of the application.</dd>
</dl>
<blockquote>
<dl>
<dt>&lt;mutexName&gt;</dt>
<dd>Unique mutex name that will identify the application.</dd>
<dt>&lt;windowTitle&gt;</dt>
<dd>Optional, recognized by GUI header only. Title or title part of a window
to bring up instead of running a new instance.
</dd>
</dl>
</dl>
<dl>
<dt>&lt;singleInstance&gt;</dt>
<dd>Optional, allow to run only a single instance of the application.</dd>
</dl>
<blockquote>
<dl>
<dt>&lt;mutexName&gt;</dt>
<dd>Unique mutex name that will identify the application.</dd>
<dt>&lt;windowTitle&gt;</dt>
<dd>Optional, recognized by GUI header only. Title or title part of a window
to bring up instead of running a new instance.
</dd>
</dl>
</blockquote>
<dl>
<dt>&lt;jre&gt;</dt>
@ -279,10 +279,10 @@ may be absolute paths or relative to the configuration file path.
Note that this path is not checked until the actual application execution.
If you'd like the wrapper to search for a JRE (public or SDK private)
use the <em>&lt;minVersion&gt;</em> property, you may also specify
the <em>&lt;maxVersion&gt;</em> to prevent it from using higher Java versions.
the <em>&lt;maxVersion&gt;</em> to prevent it from using higher Java versions.
Launch4j will always use the highest version available (in the min/max range of course).
If a Sun's JRE is not available or does not satisfy the search criteria,
the search will be repeated on IBM runtimes.
If a Sun's JRE is not available or does not satisfy the search criteria,
the search will be repeated on IBM runtimes.
You can also combine these properties to change the startup process...
</dd>
</dl>
@ -305,9 +305,9 @@ may be absolute paths or relative to the configuration file path.
<dl>
<dt>&lt;jdkPreference&gt;</dt>
<dd>Optional, defaults to preferJre; Allows you to specify a preference
for a public JRE or a private JDK runtime. Valid values are:
</dd>
</dl>
for a public JRE or a private JDK runtime. Valid values are:
</dd>
</dl>
<blockquote>
<dl>
<dt>jreOnly</dt>
@ -325,33 +325,33 @@ may be absolute paths or relative to the configuration file path.
<dt>jdkOnly</dt>
<dd>Always use a private JDK runtime (fails
if there is no JDK installed)</dd>
</dl>
</blockquote>
<dl>
<dt>HeapSize, HeapPercent</dt>
<dd>If size and percent are specified, then the setting which yields
more memory will be chosen at runtime. In other words, setting both values
means: percent of free memory no less than size in MB.
</dd>
</dl>
<blockquote>
<dl>
<dt>&lt;initialHeapSize&gt;</dt>
<dd>Optional, initial heap size in MB.</dd>
</dl>
<dl>
<dt>&lt;initialHeapPercent&gt;</dt>
<dd>Optional, initial heap size in % of free memory.</dd>
</dl>
<dl>
<dt>&lt;maxHeapSize&gt;</dt>
<dd>Optional, max heap size in MB.</dd>
</dl>
<dl>
<dt>&lt;maxHeapPercent&gt;</dt>
<dd>Optional, max heap size in % of free memory.</dd>
</dl>
</blockquote>
</dl>
</blockquote>
<dl>
<dt>HeapSize, HeapPercent</dt>
<dd>If size and percent are specified, then the setting which yields
more memory will be chosen at runtime. In other words, setting both values
means: percent of free memory no less than size in MB.
</dd>
</dl>
<blockquote>
<dl>
<dt>&lt;initialHeapSize&gt;</dt>
<dd>Optional, initial heap size in MB.</dd>
</dl>
<dl>
<dt>&lt;initialHeapPercent&gt;</dt>
<dd>Optional, initial heap size in % of free memory.</dd>
</dl>
<dl>
<dt>&lt;maxHeapSize&gt;</dt>
<dd>Optional, max heap size in MB.</dd>
</dl>
<dl>
<dt>&lt;maxHeapPercent&gt;</dt>
<dd>Optional, max heap size in % of free memory.</dd>
</dl>
</blockquote>
<dl>
<dt>&lt;opt&gt;</dt>
<dd>Optional, accepts everything you would normally pass to
@ -571,9 +571,9 @@ expansion is supported, for example:
<dd>Change the working directory if the default path contains spaces which windres cannot handle.</dd>
</dl>
</div>
<div class="footer">
<div class="footer">
All trademarks mentioned are properties of their respective owners.<br />
Copyright &copy; 2005-2008 Grzegorz Kowal
Copyright &copy; 2005-2011 Grzegorz Kowal
<p style="margin-top: 2em">
<a href="http://sourceforge.net"><img style="width: 125px; height: 37px; border: none" src="http://sourceforge.net/sflogo.php?group_id=95944&amp;type=4" alt="sf.net"></a>
<a href="http://www.nosoftwarepatents.com"><img style="width: 90px; height: 40px; border: none; margin-left: 5%" src="http://www.nosoftwarepatents.com/banners/90x40_3.jpg" alt=""></a>

View File

@ -11,7 +11,7 @@
<body>
<div id="container">
<div id="top">
<img style="width: 249px; height: 58px;" src="launch4j.gif" alt="launch4j"> <span class="version">3.0.1</span>
<img style="width: 249px; height: 58px;" src="launch4j.gif" alt="launch4j"> <span class="version">3.0.2</span>
</div>
<div id="leftnav">
<ul>
@ -19,8 +19,8 @@
<li><a href="docs.html">Docs</a></li>
<li><a href="changelog.html">Changelog</a></li>
<li><a href="http://sourceforge.net/project/screenshots.php?group_id=95944">Screenshots</a></li>
<li><a href="http://sourceforge.net/project/showfiles.php?group_id=95944&amp;package_id=192323">Download</a></li>
<li><a href="http://sourceforge.net/forum/?group_id=95944">Support</a></li>
<li><a href="http://sourceforge.net/projects/launch4j/files/launch4j-3/3.0.2">Download</a></li>
<li><a href="http://sourceforge.net/projects/launch4j/support">Support</a></li>
<li><a href="http://sourceforge.net/projects/launch4j">Project summary</a></li>
<li><a href="http://sourceforge.net/tracker/?atid=613100&amp;group_id=95944">Bug tracker</a></li>
<li><a href="links.html">Links</a></li>
@ -114,9 +114,9 @@
</p>
<a href="http://sourceforge.net/forum/forum.php?forum_id=332683"></a>
</div>
<div class="footer">
<div class="footer">
All trademarks mentioned are properties of their respective owners.<br />
Copyright &copy; 2005-2008 Grzegorz Kowal
Copyright &copy; 2005-2011 Grzegorz Kowal
<p style="margin-top: 2em">
<a href="http://sourceforge.net"><img style="width: 125px; height: 37px; border: none" src="http://sourceforge.net/sflogo.php?group_id=95944&amp;type=4" alt="sf.net"></a>
<a href="http://www.nosoftwarepatents.com"><img style="width: 90px; height: 40px; border: none; margin-left: 5%" src="http://www.nosoftwarepatents.com/banners/90x40_3.jpg" alt=""></a>

View File

@ -11,7 +11,7 @@
<body>
<div id="container">
<div id="top">
<img style="width: 249px; height: 58px;" src="launch4j.gif" alt="launch4j"> <span class="version">3.0.1</span>
<img style="width: 249px; height: 58px;" src="launch4j.gif" alt="launch4j"> <span class="version">3.0.2</span>
</div>
<div id="leftnav">
<ul>
@ -19,8 +19,8 @@
<li><a href="docs.html">Docs</a></li>
<li><a href="changelog.html">Changelog</a></li>
<li><a href="http://sourceforge.net/project/screenshots.php?group_id=95944">Screenshots</a></li>
<li><a href="http://sourceforge.net/project/showfiles.php?group_id=95944&amp;package_id=192323">Download</a></li>
<li><a href="http://sourceforge.net/forum/?group_id=95944">Support</a></li>
<li><a href="http://sourceforge.net/projects/launch4j/files/launch4j-3/3.0.2">Download</a></li>
<li><a href="http://sourceforge.net/projects/launch4j/support">Support</a></li>
<li><a href="http://sourceforge.net/projects/launch4j">Project summary</a></li>
<li><a href="http://sourceforge.net/tracker/?atid=613100&amp;group_id=95944">Bug tracker</a></li>
<li><a href="links.html">Links</a></li>
@ -59,9 +59,9 @@
<a href="http://www.izforge.com/izpack/">IzPack<a><br>
</p>
</div>
<div class="footer">
<div class="footer">
All trademarks mentioned are properties of their respective owners.<br />
Copyright &copy; 2005-2008 Grzegorz Kowal
Copyright &copy; 2005-2011 Grzegorz Kowal
<p style="margin-top: 2em">
<a href="http://sourceforge.net"><img style="width: 125px; height: 37px; border: none" src="http://sourceforge.net/sflogo.php?group_id=95944&amp;type=4" alt="sf.net"></a>
<a href="http://www.nosoftwarepatents.com"><img style="width: 90px; height: 40px; border: none; margin-left: 5%" src="http://www.nosoftwarepatents.com/banners/90x40_3.jpg" alt=""></a>