diff options
author | mlapshin <none@none> | 2008-04-24 05:58:57 -0700 |
---|---|---|
committer | mlapshin <none@none> | 2008-04-24 05:58:57 -0700 |
commit | fb7e6b072e9eface38eba718ae150acf24cb8fa5 (patch) | |
tree | d81866a3210a63b001178c8ec0754e4d62ca7941 /src/share/classes/javax/swing | |
parent | ccc55e319c62d9f597fade4db07c4f8b518d1cee (diff) | |
parent | d892b43350765e08c8eb5e7044a427459042fddb (diff) |
Merge
Diffstat (limited to 'src/share/classes/javax/swing')
-rw-r--r-- | src/share/classes/javax/swing/JEditorPane.java | 135 | ||||
-rw-r--r-- | src/share/classes/javax/swing/JTextArea.java | 15 | ||||
-rw-r--r-- | src/share/classes/javax/swing/JTextPane.java | 30 | ||||
-rw-r--r-- | src/share/classes/javax/swing/Popup.java | 10 | ||||
-rw-r--r-- | src/share/classes/javax/swing/ScrollPaneLayout.java | 8 | ||||
-rw-r--r-- | src/share/classes/javax/swing/text/JTextComponent.java | 11 |
6 files changed, 47 insertions, 162 deletions
diff --git a/src/share/classes/javax/swing/JEditorPane.java b/src/share/classes/javax/swing/JEditorPane.java index 839507529..c126fe70c 100644 --- a/src/share/classes/javax/swing/JEditorPane.java +++ b/src/share/classes/javax/swing/JEditorPane.java @@ -429,9 +429,8 @@ public class JEditorPane extends JTextComponent { // different url or POST method, load the new content int p = getAsynchronousLoadPriority(getDocument()); - if ((postData == null) || (p < 0)) { - // Either we do not have POST data, or should submit the data - // synchronously. + if (p < 0) { + // open stream synchronously InputStream in = getStream(page); if (kit != null) { Document doc = initializeModel(kit, page); @@ -440,22 +439,13 @@ public class JEditorPane extends JTextComponent { // view notifications slowing it down (i.e. best synchronous // behavior) or set the model and start to feed it on a separate // thread (best asynchronous behavior). - synchronized(this) { - if (loading != null) { - // we are loading asynchronously, so we need to cancel - // the old stream. - loading.cancel(); - loading = null; - } - } p = getAsynchronousLoadPriority(doc); if (p >= 0) { // load asynchronously setDocument(doc); synchronized(this) { - loading = new PageStream(in); - Thread pl = new PageLoader(doc, loading, p, loaded, page); - pl.start(); + pageLoader = new PageLoader(doc, in, loaded, page); + pageLoader.execute(); } return; } @@ -464,11 +454,15 @@ public class JEditorPane extends JTextComponent { reloaded = true; } } else { - // We have POST data and should send it asynchronously. - // Send (and subsequentally read) data in separate thread. + // we may need to cancel background loading + if (pageLoader != null) { + pageLoader.cancel(true); + } + + // Do everything in a background thread. // Model initialization is deferred to that thread, too. - Thread pl = new PageLoader(null, null, p, loaded, page); - pl.start(); + pageLoader = new PageLoader(null, null, loaded, page); + pageLoader.execute(); return; } } @@ -604,44 +598,38 @@ public class JEditorPane extends JTextComponent { /** - * Thread to load a stream into the text document model. + * Loads a stream into the text document model. */ - class PageLoader extends Thread { + class PageLoader extends SwingWorker<URL, Object> { /** * Construct an asynchronous page loader. */ - PageLoader(Document doc, InputStream in, int priority, URL old, - URL page) { - setPriority(priority); + PageLoader(Document doc, InputStream in, URL old, URL page) { this.in = in; this.old = old; this.page = page; this.doc = doc; } - boolean pageLoaded = false; - /** * Try to load the document, then scroll the view * to the reference (if specified). When done, fire * a page property change event. */ - public void run() { + protected URL doInBackground() { + boolean pageLoaded = false; try { if (in == null) { in = getStream(page); if (kit == null) { // We received document of unknown content type. - UIManager.getLookAndFeel().provideErrorFeedback( - JEditorPane.this); - return; - } - // Access to <code>loading</code> should be synchronized. - synchronized(JEditorPane.this) { - in = loading = new PageStream(in); + UIManager.getLookAndFeel(). + provideErrorFeedback(JEditorPane.this); + return old; } } + if (doc == null) { try { SwingUtilities.invokeAndWait(new Runnable() { @@ -653,11 +641,11 @@ public class JEditorPane extends JTextComponent { } catch (InvocationTargetException ex) { UIManager.getLookAndFeel().provideErrorFeedback( JEditorPane.this); - return; + return old; } catch (InterruptedException ex) { UIManager.getLookAndFeel().provideErrorFeedback( JEditorPane.this); - return; + return old; } } @@ -682,16 +670,14 @@ public class JEditorPane extends JTextComponent { } catch (IOException ioe) { UIManager.getLookAndFeel().provideErrorFeedback(JEditorPane.this); } finally { - synchronized(JEditorPane.this) { - loading = null; - } - SwingUtilities.invokeLater(new Runnable() { - public void run() { - if (pageLoaded) { - firePropertyChange("page", old, page); + if (pageLoaded) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + JEditorPane.this.firePropertyChange("page", old, page); } - } - }); + }); + } + return (pageLoaded ? page : old); } } @@ -718,51 +704,6 @@ public class JEditorPane extends JTextComponent { Document doc; } - static class PageStream extends FilterInputStream { - - boolean canceled; - - public PageStream(InputStream i) { - super(i); - canceled = false; - } - - /** - * Cancel the loading of the stream by throwing - * an IOException on the next request. - */ - public synchronized void cancel() { - canceled = true; - } - - protected synchronized void checkCanceled() throws IOException { - if (canceled) { - throw new IOException("page canceled"); - } - } - - public int read() throws IOException { - checkCanceled(); - return super.read(); - } - - public long skip(long n) throws IOException { - checkCanceled(); - return super.skip(n); - } - - public int available() throws IOException { - checkCanceled(); - return super.available(); - } - - public void reset() throws IOException { - checkCanceled(); - super.reset(); - } - - } - /** * Fetches a stream for the given URL, which is about to * be loaded by the <code>setPage</code> method. By @@ -1179,11 +1120,6 @@ public class JEditorPane extends JTextComponent { * current selection. The replacement text will have the * attributes currently defined for input. If the component is not * editable, beep and return. - * <p> - * This method is thread safe, although most Swing methods - * are not. Please see - * <A HREF="http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html">How - * to Use Threads</A> for more information. * * @param content the content to replace the selection with. This * value can be <code>null</code> @@ -1454,11 +1390,6 @@ public class JEditorPane extends JTextComponent { * create a StringReader and call the read method. In this case the model * would be replaced after it was initialized with the contents of the * string. - * <p> - * This method is thread safe, although most Swing methods - * are not. Please see - * <A HREF="http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html">How - * to Use Threads</A> for more information. * * @param t the new text to be set; if <code>null</code> the old * text will be deleted @@ -1573,11 +1504,7 @@ public class JEditorPane extends JTextComponent { // --- variables --------------------------------------- - /** - * Stream currently loading asynchronously (potentially cancelable). - * Access to this variable should be synchronized. - */ - PageStream loading; + private SwingWorker<URL, Object> pageLoader; /** * Current content binding of the editor. diff --git a/src/share/classes/javax/swing/JTextArea.java b/src/share/classes/javax/swing/JTextArea.java index 8f53daf2a..f7718198b 100644 --- a/src/share/classes/javax/swing/JTextArea.java +++ b/src/share/classes/javax/swing/JTextArea.java @@ -444,11 +444,6 @@ public class JTextArea extends JTextComponent { /** * Inserts the specified text at the specified position. Does nothing * if the model is null or if the text is null or empty. - * <p> - * This method is thread safe, although most Swing methods - * are not. Please see - * <A HREF="http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html">How - * to Use Threads</A> for more information. * * @param str the text to insert * @param pos the position at which to insert >= 0 @@ -471,11 +466,6 @@ public class JTextArea extends JTextComponent { /** * Appends the given text to the end of the document. Does nothing if * the model is null or the string is null or empty. - * <p> - * This method is thread safe, although most Swing methods - * are not. Please see - * <A HREF="http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html">How - * to Use Threads</A> for more information. * * @param str the text to insert * @see #insert @@ -494,11 +484,6 @@ public class JTextArea extends JTextComponent { * Replaces text from the indicated start to end position with the * new text specified. Does nothing if the model is null. Simply * does a delete if the new string is null or empty. - * <p> - * This method is thread safe, although most Swing methods - * are not. Please see - * <A HREF="http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html">How - * to Use Threads</A> for more information. * * @param str the text to use as the replacement * @param start the start position >= 0 diff --git a/src/share/classes/javax/swing/JTextPane.java b/src/share/classes/javax/swing/JTextPane.java index 69b94a30e..c820f512d 100644 --- a/src/share/classes/javax/swing/JTextPane.java +++ b/src/share/classes/javax/swing/JTextPane.java @@ -167,11 +167,6 @@ public class JTextPane extends JEditorPane { * current selection. The replacement text will have the * attributes currently defined for input at the point of * insertion. If the document is not editable, beep and return. - * <p> - * This method is thread safe, although most Swing methods - * are not. Please see - * <A HREF="http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html">How - * to Use Threads</A> for more information. * * @param content the content to replace the selection with */ @@ -229,11 +224,6 @@ public class JTextPane extends JEditorPane { * a value of <code>0.75</code> will cause 75 percent of the * component to be above the baseline, and 25 percent of the * component to be below the baseline. - * <p> - * This method is thread safe, although most Swing methods - * are not. Please see - * <A HREF="http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html">How - * to Use Threads</A> for more information. * * @param c the component to insert */ @@ -252,11 +242,6 @@ public class JTextPane extends JEditorPane { * current position of the caret. This is represented in * the associated document as an attribute of one character * of content. - * <p> - * This method is thread safe, although most Swing methods - * are not. Please see - * <A HREF="http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html">How - * to Use Threads</A> for more information. * * @param g the icon to insert * @see Icon @@ -320,11 +305,6 @@ public class JTextPane extends JEditorPane { * through the logical style assigned to the paragraph, which * in term may resolve through some hierarchy completely * independent of the element hierarchy in the document. - * <p> - * This method is thread safe, although most Swing methods - * are not. Please see - * <A HREF="http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html">How - * to Use Threads</A> for more information. * * @param s the logical style to assign to the paragraph, * or <code>null</code> for no style @@ -367,11 +347,6 @@ public class JTextPane extends JEditorPane { * is no selection, the attributes are applied to * the input attribute set which defines the attributes * for any new text that gets inserted. - * <p> - * This method is thread safe, although most Swing methods - * are not. Please see - * <A HREF="http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html">How - * to Use Threads</A> for more information. * * @param attr the attributes * @param replace if true, then replace the existing attributes first @@ -412,11 +387,6 @@ public class JTextPane extends JEditorPane { * to the paragraphs that intersect the selection. * If there is no selection, the attributes are applied * to the paragraph at the current caret position. - * <p> - * This method is thread safe, although most Swing methods - * are not. Please see - * <A HREF="http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html">How - * to Use Threads</A> for more information. * * @param attr the non-<code>null</code> attributes * @param replace if true, replace the existing attributes first diff --git a/src/share/classes/javax/swing/Popup.java b/src/share/classes/javax/swing/Popup.java index 02ab11610..a6373f87b 100644 --- a/src/share/classes/javax/swing/Popup.java +++ b/src/share/classes/javax/swing/Popup.java @@ -229,7 +229,15 @@ public class Popup { // Popups are typically transient and most likely won't benefit // from true double buffering. Turn it off here. getRootPane().setUseTrueDoubleBuffering(false); - setAlwaysOnTop(true); + // Try to set "always-on-top" for the popup window. + // Applets usually don't have sufficient permissions to do it. + // In this case simply ignore the exception. + try { + setAlwaysOnTop(true); + } catch (SecurityException se) { + // setAlwaysOnTop is restricted, + // the exception is ignored + } } public void update(Graphics g) { diff --git a/src/share/classes/javax/swing/ScrollPaneLayout.java b/src/share/classes/javax/swing/ScrollPaneLayout.java index 34aa1cae6..ed769a929 100644 --- a/src/share/classes/javax/swing/ScrollPaneLayout.java +++ b/src/share/classes/javax/swing/ScrollPaneLayout.java @@ -488,10 +488,14 @@ public class ScrollPaneLayout Dimension viewSize = null; Component view = null; - if (viewport != null) { + if (viewport != null) { extentSize = viewport.getPreferredSize(); view = viewport.getView(); - viewSize = view.getPreferredSize(); + if (view != null) { + viewSize = view.getPreferredSize(); + } else { + viewSize = new Dimension(0, 0); + } } /* If there's a viewport add its preferredSize. diff --git a/src/share/classes/javax/swing/text/JTextComponent.java b/src/share/classes/javax/swing/text/JTextComponent.java index 9ba898956..d340f281e 100644 --- a/src/share/classes/javax/swing/text/JTextComponent.java +++ b/src/share/classes/javax/swing/text/JTextComponent.java @@ -1349,11 +1349,6 @@ public abstract class JTextComponent extends JComponent implements Scrollable, A * This is the method that is used by the default implementation * of the action for inserting content that gets bound to the * keymap actions. - * <p> - * This method is thread safe, although most Swing methods - * are not. Please see - * <A HREF="http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html">How - * to Use Threads</A> for more information. * * @param content the content to replace the selection with */ @@ -1687,12 +1682,8 @@ public abstract class JTextComponent extends JComponent implements Scrollable, A * or empty, has the effect of simply deleting the old text. * When text has been inserted, the resulting caret location * is determined by the implementation of the caret class. - * <p> - * This method is thread safe, although most Swing methods - * are not. Please see - * <A HREF="http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html">How - * to Use Threads</A> for more information. * + * <p> * Note that text is not a bound property, so no <code>PropertyChangeEvent * </code> is fired when it changes. To listen for changes to the text, * use <code>DocumentListener</code>. |