📄 concurreadtext.htm
字号:
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<TITLE>Asynchronously Reading the Contents of a Visible JTextComponent (Java Developers Almanac Example)
</TITLE>
<META CONTENT="Patrick Chan" NAME="AUTHOR">
<META CONTENT="Code Examples from The Java Developers Almanac 1.4" NAME="DESCRIPTION">
<META CONTENT="Addison-Wesley/Patrick Chan" NAME="OWNER">
<META CONTENT="3/20/02" NAME="revision">
<META CONTENT="no-cache" HTTP-EQUIV="Pragma">
<LINK href="/almanac.css" media="screen" type="text/css" rel="stylesheet">
</HEAD>
<BODY>
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0">
<TR>
<TD></TD>
</TR>
</TABLE>
<br>
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0">
<TR>
<TD></TD>
</TR>
<TR>
<TD rowspan="3"><A HREF="/?l=ex"><IMG BORDER="0" ALIGN="BOTTOM" HSPACE="10" SRC="/egs/almanac14a.jpg"></A></TD><TD VALIGN="top">
<h1>The Java Developers Almanac 1.4</h1>
<br>
Order this book from <a href="/cgi-bin/scripts/redirect.pl?l=ex&url=http://www.amazon.com/exec/obidos/ASIN/0201752808/xeo">Amazon</a>.
</TD>
</TR>
<TR>
<TD align="right" valign="bottom">
<FORM method="get" action="/cgi-bin/search/find.pl">
<INPUT size="25" name="words" type="text"><INPUT value="Search" type="submit">
</FORM>
</TD>
</TR>
</TABLE>
<HR color="#6666cc">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0">
<TR>
<TD valign="top"><script type="text/javascript">
<!--
google_ad_client = "pub-6001183370374757";
google_ad_width = 120;
google_ad_height = 600;
google_ad_format = "120x600_as";
google_ad_channel = "4777242811";
google_ad_type = "text_image";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "6666CC";
google_color_url = "6666CC";
google_color_text = "000000";
//--></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script></TD><TD> </TD><TD valign="top">
<DIV ALIGN="LEFT">
<A HREF="/">Home</A>
>
<A HREF="../index.html">List of Packages</A>
>
<A HREF="../javax.swing.text/pkg.html">javax.swing.text</A><font color="#666666" class="xsmall-font">
[49 examples]
</font>
>
<B><A HREF="../javax.swing.text/pkg.html#JTextComponent">JTextComponent</A></B><font color="#666666" class="xsmall-font">
[11 examples]
</font>
</DIV><P>
<h3>e971. Asynchronously Reading the Contents of a Visible JTextComponent</h3>
When a text component is visible on the screen, you cannot simply call
<code>getText()</code> on the document model to retrieve the text. The reason
is that the user may be modifying the text at the same time.
There are two ways to safely access the contents of the text
component. One is by using <code>SwingUtilities.invokeLater()</code> and the
other is by using <code>Document.render()</code>. This example demonstrates
the latter.
<pre> // Create and display the component
JTextComponent textComp = new <font color="#0066ff"><i>JTextArea()</i></font>;
Document doc = textComp.getDocument();
JFrame frame = new JFrame();
frame.getContentPane().add(textComp, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
// Read the contents
try {
<font color="#0066ff"><i>process</i></font>(read(doc));
} catch (InterruptedException e) {
} catch (Exception e) {
}
// This method returns the contents of a Document using a renderer.
public static String read(Document doc) throws InterruptedException, Exception {
Renderer r = new Renderer(doc);
doc.render(r);
synchronized (r) {
while (!r.done) {
r.wait();
if (r.err != null) {
throw new Exception(r.err);
}
}
}
return r.result;
}
static class Renderer implements Runnable {
Document doc;
String result;
Throwable err;
boolean done;
Renderer(Document doc) {
this.doc = doc;
}
public synchronized void run() {
try {
result = doc.getText(0, doc.getLength());
} catch (Throwable e) {
err = e;
e.printStackTrace();
}
done = true;
// When done, notify the creator of this object
notify();
}
}
</pre>
<P><table width="600" CELLSPACING="0" CELLPADDING="2" BORDER="0">
<tr>
<td bgcolor="#6666cc" align="center"><font color="#ffffff">
<b>Related Examples</b></font></td>
</tr>
</table>
e968. <a class="eglink" href="GetText.html?l=rel">
Retrieving Text from a JTextComponent
</a>
<br>
e969. <a class="eglink" href="PartialSeg.html?l=rel">
Retrieving All the Text from a JTextComponent Efficiently
</a>
<br>
e970. <a class="eglink" href="EditTextField.html?l=rel">
Modifying Text in a JTextComponent
</a>
<br>
e972. <a class="eglink" href="FindWord.html?l=rel">
Finding Word Boundaries in a JTextComponent
</a>
<br>
e973. <a class="eglink" href="GetWrappedLines.html?l=rel">
Retrieving the Visible Lines in a JTextComponent
</a>
<br>
e974. <a class="eglink" href="Pos.html?l=rel">
Using a Position in a JTextComponent
</a>
<br>
e975. <a class="eglink" href="LimitText.html?l=rel">
Limiting the Capacity of a JTextComponent
</a>
<br>
e976. <a class="eglink" href="DragEnabledTextArea.html?l=rel">
Enabling Text-Dragging on a JTextComponent
</a>
<br>
e977. <a class="eglink" href="ShareDoc.html?l=rel">
Sharing a Document Between JTextComponents
</a>
<br>
e978. <a class="eglink" href="WalkViews.html?l=rel">
Enumerating All the Views in a JTextComponent
</a>
<br>
<table width="600" CELLSPACING="0" CELLPADDING="2" BORDER="0">
<tr>
<td align="left">
<br>
See also:
<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#Actions%20and%20Key%20Bindings">
Actions and Key Bindings
</a>
<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#Caret%20and%20Selection">
Caret and Selection
</a>
<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#Events">
Events
</a>
<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#JEditorPane">
JEditorPane
</a>
<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#JFormattedTextField">
JFormattedTextField
</a>
<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#JTextArea">
JTextArea
</a>
<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#JTextField">
JTextField
</a>
<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#JTextPane">
JTextPane
</a>
<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#Styles">
Styles
</a>
</td>
</tr>
</table>
<br>
<br>
<FONT class="xsmall-font">
© 2002 Addison-Wesley.
</FONT></TD><TD> </TD><TD valign="top"><A href="http://compositesw.com/devzone?ref=javaalmanac"><IMG alt="Click Here" height="600" width="120" border="0" src="/csw_oad_120x600_final.gif"></A></TD>
</TR>
</TABLE>
</BODY>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<META CONTENT="NO-CACHE" HTTP-EQUIV="PRAGMA">
</HEAD>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -