Commit fa9b2f43 authored by Christian Schudt's avatar Christian Schudt

Launcher: Use Java 6 SwingWorker instead of "Version 3 SwingWorker".

There was an old backport of SwingWorker for JDK < 6 from 2003, which was known as "SwingWorker Version 3".
Openfire does not need such old backports anymore.
parent 777d5eaa
......@@ -63,6 +63,7 @@ import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.SwingWorker;
import javax.swing.UIManager;
import javax.swing.text.BadLocationException;
import javax.swing.text.SimpleAttributeSet;
......@@ -457,9 +458,9 @@ public class Launcher {
}
final SimpleAttributeSet styles = new SimpleAttributeSet();
SwingWorker inputWorker = new SwingWorker() {
SwingWorker<String, Void> inputWorker = new SwingWorker<String, Void>() {
@Override
public Object construct() {
public String doInBackground() {
if (openfired != null) {
// Get the input stream and read from it
try (InputStream in = openfired.getInputStream()) {
......@@ -482,12 +483,12 @@ public class Launcher {
return "ok";
}
};
inputWorker.start();
inputWorker.execute();
SwingWorker errorWorker = new SwingWorker() {
SwingWorker<String, Void> errorWorker = new SwingWorker<String, Void>() {
@Override
public Object construct() {
public String doInBackground() {
if (openfired != null) {
// Get the input stream and read from it
try (InputStream in = openfired.getErrorStream()) {
......@@ -509,7 +510,7 @@ public class Launcher {
return "ok";
}
};
errorWorker.start();
errorWorker.execute();
if (freshStart) {
try {
......@@ -589,8 +590,7 @@ public class Launcher {
}
if ("-1".equals(port)) {
BrowserLauncher.openURL("https://127.0.0.1:" + securePort + "/index.html");
}
else {
} else {
BrowserLauncher.openURL("http://127.0.0.1:" + port + "/index.html");
}
}
......@@ -612,9 +612,9 @@ public class Launcher {
dialog.pack();
dialog.setSize(225, 55);
final SwingWorker installerThread = new SwingWorker() {
final SwingWorker<File, Void> installerThread = new SwingWorker<File, Void>() {
@Override
public Object construct() {
public File doInBackground() {
File pluginsDir = new File(binDir.getParentFile(), "plugins");
String tempName = plugin.getName() + ".part";
File tempPluginsFile = new File(pluginsDir, tempName);
......@@ -638,13 +638,13 @@ public class Launcher {
}
@Override
public void finished() {
public void done() {
dialog.setVisible(false);
}
};
// Start installation
installerThread.start();
installerThread.execute();
dialog.setLocationRelativeTo(frame);
dialog.setVisible(true);
......
/**
* $RCSfile$
* $Revision: 1094 $
* $Date: 2005-03-07 04:32:32 -0300 (Mon, 07 Mar 2005) $
*
* Copyright (C) 2004-2008 Jive Software. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jivesoftware.openfire.launcher;
import javax.swing.SwingUtilities;
/**
* Modified SwingWorker that actually works.
* @author Derek DeMoro
*/
public abstract class SwingWorker {
private Object value; // see getValue(), setValue()
private Thread thread;
/**
* Class to maintain reference to current worker thread
* under separate synchronization control.
*/
private static class ThreadVar {
private Thread thread;
ThreadVar(Thread t) {
thread = t;
}
synchronized Thread get() {
return thread;
}
synchronized void clear() {
thread = null;
}
}
private ThreadVar threadVar;
/**
* Get the value produced by the worker thread, or null if it
* hasn't been constructed yet.
*/
protected synchronized Object getValue() {
return value;
}
/**
* Set the value produced by worker thread
*/
private synchronized void setValue(Object x) {
value = x;
}
/**
* Compute the value to be returned by the <code>get</code> method.
*/
public abstract Object construct();
/**
* Called on the event dispatching thread (not on the worker thread)
* after the <code>construct</code> method has returned.
*/
public void finished() {
}
/**
* A new method that interrupts the worker thread. Call this method
* to force the worker to stop what it's doing.
*/
public void interrupt() {
Thread t = threadVar.get();
if (t != null) {
t.interrupt();
}
threadVar.clear();
}
/**
* Return the value created by the <code>construct</code> method.
* Returns null if either the constructing thread or the current
* thread was interrupted before a value was produced.
*
* @return the value created by the <code>construct</code> method
*/
public Object get() {
while (true) {
Thread t = threadVar.get();
if (t == null) {
return getValue();
}
try {
t.join();
}
catch (InterruptedException e) {
Thread.currentThread().interrupt(); // propagate
return null;
}
}
}
/**
* Start a thread that will call the <code>construct</code> method
* and then exit.
*/
public SwingWorker() {
final Runnable doFinished = new Runnable() {
@Override
public void run() {
finished();
}
};
Runnable doConstruct = new Runnable() {
@Override
public void run() {
try {
setValue(construct());
}
finally {
threadVar.clear();
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
finished();
}
});
}
};
Thread t = new Thread(doConstruct);
threadVar = new ThreadVar(t);
}
/**
* Start the worker thread.
*/
public void start() {
Thread t = threadVar.get();
if (t != null) {
t.start();
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment