- java.lang.Object
-
- javax.swing.text.AbstractDocument
-
- 实现的所有接口
-
Serializable
,Document
- 已知直接子类:
-
DefaultStyledDocument
,PlainDocument
public abstract class AbstractDocument extends Object implements Document, Serializable
文档接口的实现,作为实现各种文档的基础。 在这个级别上,政策很少,因此使用难度也相应增加。此类实现文档的锁定机制。 它允许多个读者或一个作者,并且作者必须等到文档的所有观察者在开始对文档的另一个变异之前已经通知先前的变化。 使用
render
方法获取并释放读锁定。 通过改变文档的方法获取写锁定,并在方法调用期间保持写锁定。 通知在产生突变的线程上完成,并且线程在通知期间具有对文档的完全读取访问权限,但是其他读取器在通知完成之前保持不变。 通知是一个bean事件通知,在通知所有侦听器之前不允许任何进一步的突变。从此类子类化并与具有从BasicTextUI派生的外观实现的文本组件结合使用的任何模型都可以安全地异步更新,因为如果文档类型为
AbstractDocument
则对AbstractDocument
所有对View层次结构的访问都是序列化的。 锁定假定独立线程仅从DocumentListener方法访问View层次结构,并且一次只有一个事件线程处于活动状态。如果需要并发支持,则还有以下其他含义。 任何DocumentListener实现和任何UndoListener实现的代码路径必须是线程安全的,如果尝试从死锁中安全,则不能访问组件锁。 JComponent上的
repaint
和revalidate
方法是安全的。AbstractDocument模拟文档末尾的隐含中断。 除此之外,这允许您在最后一个字符后定位插入符号。 因此,
getLength
返回的内容少于内容的长度。 如果您创建自己的内容,请确保并初始化它以具有其他角色。 有关此示例,请参阅StringContent和GapContent。 另一个含义是,对隐含结束字符建模的元素将具有endOffset ==(getLength()+ 1)。 例如,在DefaultStyledDocumentgetParagraphElement(getLength()).getEndOffset() == getLength() + 1
。警告:此类的序列化对象与以后的Swing版本不兼容。 当前的序列化支持适用于运行相同版本Swing的应用程序之间的短期存储或RMI。 从1.4开始,
java.beans
软件包中添加了对所有JavaBeansjava.beans
长期存储的支持。 请参阅XMLEncoder
。- 另请参见:
- Serialized Form
-
-
嵌套类汇总
嵌套类 变量和类型 类 描述 class
AbstractDocument.AbstractElement
实现元素的抽象部分。static interface
AbstractDocument.AttributeContext
可用于允许MutableAttributeSet实现使用可插入属性压缩技术的接口。class
AbstractDocument.BranchElement
实现包含其他元素的复合元素。static interface
AbstractDocument.Content
用于描述可编辑的字符内容序列的界面。class
AbstractDocument.DefaultDocumentEvent
在修改文档时存储文档更改。static class
AbstractDocument.ElementEdit
可以添加到文档事件的ElementChange的实现。class
AbstractDocument.LeafElement
实现直接表示某种内容的元素。
-
字段汇总
字段 变量和类型 字段 描述 protected static String
BAD_LOCATION
指示错误位置的错误消息。static String
BidiElementName
用于保持单向运行的元素的名称static String
ContentElementName
用于表示内容的元素的名称static String
ElementNameAttribute
用于指定元素名称的属性的名称。protected EventListenerList
listenerList
文档的事件侦听器列表。static String
ParagraphElementName
用于表示段落的元素的名称static String
SectionElementName
用于保存部分(行/段落)的元素的名称。-
Fields declared in interface javax.swing.text.Document
StreamDescriptionProperty, TitleProperty
-
-
构造方法摘要
构造方法 变量 构造器 描述 protected
AbstractDocument(AbstractDocument.Content data)
构造一个新的AbstractDocument
,包含一些指定的内容存储机制。protected
AbstractDocument(AbstractDocument.Content data, AbstractDocument.AttributeContext context)
构造一个新的AbstractDocument
,包含一些指定的内容存储机制。
-
方法摘要
所有方法 实例方法 抽象方法 具体的方法 变量和类型 方法 描述 void
addDocumentListener(DocumentListener listener)
添加文档侦听器以通知任何更改。void
addUndoableEditListener(UndoableEditListener listener)
添加撤消侦听器以通知任何更改。protected Element
createBranchElement(Element parent, AttributeSet a)
创建一个文档分支元素,可以包含其他元素。protected Element
createLeafElement(Element parent, AttributeSet a, int p0, int p1)
创建文档叶元素。Position
createPosition(int offs)
返回一个位置,该位置将在文档更改时跟踪更改。void
dump(PrintStream out)
提供诊断转储。protected void
fireChangedUpdate(DocumentEvent e)
通知所有已注册对此事件类型的通知感兴趣的听众。protected void
fireInsertUpdate(DocumentEvent e)
通知所有已注册对此事件类型的通知感兴趣的听众。protected void
fireRemoveUpdate(DocumentEvent e)
通知所有已注册对此事件类型的通知感兴趣的听众。protected void
fireUndoableEditUpdate(UndoableEditEvent e)
通知所有已注册对此事件类型的通知感兴趣的听众。int
getAsynchronousLoadPriority()
获取异步加载优先级。protected AbstractDocument.AttributeContext
getAttributeContext()
获取管理属性的上下文。Element
getBidiRootElement()
返回此文档的双向结构的根元素。protected AbstractDocument.Content
getContent()
获取文档的内容。protected Thread
getCurrentWriter()
获取当前写入线程(如果有)。abstract Element
getDefaultRootElement()
返回视图应基于的根元素,除非提供了用于将视图分配给元素结构的其他机制。DocumentFilter
getDocumentFilter()
返回负责过滤插入/删除的DocumentFilter
。DocumentListener[]
getDocumentListeners()
返回在此文档上注册的所有文档侦听器的数组。Dictionary<Object,Object>
getDocumentProperties()
支持管理一组属性。Position
getEndPosition()
返回表示文档末尾的位置。int
getLength()
返回数据的长度。<T extends EventListener>
T[]getListeners(类<T> listenerType)
返回此文档上当前注册为FooListener
的所有对象的数组。abstract Element
getParagraphElement(int pos)
获取包含给定位置的段落元素。Object
getProperty(Object key)
查找属性值的便捷方法。Element[]
getRootElements()
获取定义的所有根元素。Position
getStartPosition()
返回表示文档开头的位置。String
getText(int offset, int length)
从文档中获取一系列文本。void
getText(int offset, int length, Segment txt)
获取文档给定部分中包含的文本。UndoableEditListener[]
getUndoableEditListeners()
返回在此文档上注册的所有可撤消编辑侦听器的数组。void
insertString(int offs, String str, AttributeSet a)
将一些内容插入到文档中。protected void
insertUpdate(AbstractDocument.DefaultDocumentEvent chng, AttributeSet attr)
作为文本插入的结果更新文档结构。protected void
postRemoveUpdate(AbstractDocument.DefaultDocumentEvent chng)
作为文本删除的结果更新任何文档结构。void
putProperty(Object key, Object value)
用于存储属性值的便利方法。void
readLock()
获取锁以开始从文档中读取某些状态。void
readUnlock()
读取是否解锁。void
remove(int offs, int len)
从文档中删除一些内容。void
removeDocumentListener(DocumentListener listener)
删除文档侦听器。void
removeUndoableEditListener(UndoableEditListener listener)
删除撤消侦听器。protected void
removeUpdate(AbstractDocument.DefaultDocumentEvent chng)
作为文本删除的结果更新任何文档结构。void
render(Runnable r)
如果模型支持异步更新,则允许在存在货币的情况下安全地呈现模型。void
replace(int offset, int length, String text, AttributeSet attrs)
删除文本区域offset
至offset + length
,并将其替换为text
。void
setAsynchronousLoadPriority(int p)
设置异步加载优先级。void
setDocumentFilter(DocumentFilter filter)
设置DocumentFilter
。void
setDocumentProperties(Dictionary<Object,Object> x)
替换此文档的文档属性字典。protected void
writeLock()
获取一个锁以开始改变此锁保护的文件。protected void
writeUnlock()
释放先前通过writeLock
获得的写锁定。
-
-
-
字段详细信息
-
listenerList
protected EventListenerList listenerList
文档的事件侦听器列表。
-
-
构造方法详细信息
-
AbstractDocument
protected AbstractDocument(AbstractDocument.Content data)
构造一个新的AbstractDocument
,包含一些指定的内容存储机制。- 参数
-
data
- 内容
-
AbstractDocument
protected AbstractDocument(AbstractDocument.Content data, AbstractDocument.AttributeContext context)
构造一个新的AbstractDocument
,包含一些指定的内容存储机制。- 参数
-
data
- 内容 -
context
- 属性上下文
-
-
方法详细信息
-
getDocumentProperties
public Dictionary<Object,Object> getDocumentProperties()
支持管理一组属性。documentProperties
者可以使用documentProperties
字典使用文档范围的属性注释文档。- 结果
-
非
null
Dictionary
- 另请参见:
-
setDocumentProperties(java.util.Dictionary<java.lang.Object, java.lang.Object>)
-
setDocumentProperties
public void setDocumentProperties(Dictionary<Object,Object> x)
替换此文档的文档属性字典。- 参数
-
x
- 新字典 - 另请参见:
-
getDocumentProperties()
-
fireInsertUpdate
protected void fireInsertUpdate(DocumentEvent e)
通知所有已注册对此事件类型的通知感兴趣的听众。 使用传递给fire方法的参数延迟创建事件实例。- 参数
-
e
- 此活动 - 另请参见:
-
EventListenerList
-
fireChangedUpdate
protected void fireChangedUpdate(DocumentEvent e)
通知所有已注册对此事件类型的通知感兴趣的听众。 使用传递给fire方法的参数延迟创建事件实例。- 参数
-
e
- 活动 - 另请参见:
-
EventListenerList
-
fireRemoveUpdate
protected void fireRemoveUpdate(DocumentEvent e)
通知所有已注册对此事件类型的通知感兴趣的听众。 使用传递给fire方法的参数延迟创建事件实例。- 参数
-
e
- 此次活动 - 另请参见:
-
EventListenerList
-
fireUndoableEditUpdate
protected void fireUndoableEditUpdate(UndoableEditEvent e)
通知所有已注册对此事件类型的通知感兴趣的听众。 使用传递给fire方法的参数延迟创建事件实例。- 参数
-
e
- 此活动 - 另请参见:
-
EventListenerList
-
getListeners
public <T extends EventListener> T[] getListeners(类<T> listenerType)
返回此文档上当前注册为FooListener
的所有对象的数组。FooListener
s使用addFooListener
方法注册。您可以使用类文字指定
listenerType
参数,例如FooListener.class
。 例如,您可以使用以下代码查询文档d
以获取其文档侦听器:DocumentListener[] mls = (DocumentListener[])(d.getListeners(DocumentListener.class));
如果不存在此类侦听器,则此方法返回空数组。- 参数类型
-
T
- 侦听器类型 - 参数
-
listenerType
- 请求的侦听器类型 - 结果
-
此组件上注册为
FooListener
的所有对象的数组,如果未添加此类侦听器,则为空数组 - 异常
-
ClassCastException
- 如果listenerType
未指定实现java.util.EventListener
的类或接口 - 从以下版本开始:
- 1.3
- 另请参见:
-
getDocumentListeners()
,getUndoableEditListeners()
-
getAsynchronousLoadPriority
public int getAsynchronousLoadPriority()
获取异步加载优先级。 如果小于零,则不应异步加载文档。- 结果
-
异步加载优先级,如果不应异步加载文档,
-1
-
setAsynchronousLoadPriority
public void setAsynchronousLoadPriority(int p)
设置异步加载优先级。- 参数
-
p
- 新的异步加载优先级; 小于零的值表示不应异步加载文档
-
setDocumentFilter
public void setDocumentFilter(DocumentFilter filter)
设置DocumentFilter
。DocumentFilter
通过insert
和remove
以有条件地允许插入/删除文本。 值null
表示不会进行过滤。- 参数
-
filter
- 用于约束文本的DocumentFilter
- 从以下版本开始:
- 1.4
- 另请参见:
-
getDocumentFilter()
-
getDocumentFilter
public DocumentFilter getDocumentFilter()
返回负责过滤插入/删除的DocumentFilter
。null
返回值意味着不会发生过滤。- 结果
- DocumentFilter
- 从以下版本开始:
- 1.4
- 另请参见:
-
setDocumentFilter(javax.swing.text.DocumentFilter)
-
render
public void render(Runnable r)
如果模型支持异步更新,则允许在存在货币的情况下安全地呈现模型。 给定的runnable将以允许它在执行runnable时安全地读取模型而不进行任何更改的方式执行。 可运行本身可能不会发生任何突变。实现此操作是为了在runnables执行期间获取读锁定。 可能有多个runnable同时执行,并且所有编写器将在有活动渲染runnable时被阻止。 如果runnable抛出异常,它的锁将被安全释放。 对于永不退出的runnable没有任何保护,这将有效地使文档在其生命周期内被锁定。
如果给定的runnable尝试在此实现中进行任何突变,则会发生死锁。 没有跟踪单个渲染线程来启用检测这种情况,但是子类可能会产生跟踪它们并引发错误的开销。
虽然大多数Swing方法都不是,但这种方法是线程安全的。 有关更多信息,请参阅Concurrency in Swing 。
-
getLength
public int getLength()
返回数据的长度。 这是表示用户数据的内容字符数。- Specified by:
-
getLength
在界面Document
- 结果
- 长度> = 0
- 另请参见:
-
Document.getLength()
-
addDocumentListener
public void addDocumentListener(DocumentListener listener)
添加文档侦听器以通知任何更改。- Specified by:
-
addDocumentListener
在界面Document
- 参数
-
listener
- 要添加的DocumentListener
- 另请参见:
-
Document.addDocumentListener(javax.swing.event.DocumentListener)
-
removeDocumentListener
public void removeDocumentListener(DocumentListener listener)
删除文档侦听器。- Specified by:
-
removeDocumentListener
在界面Document
- 参数
-
listener
- 要删除的DocumentListener
- 另请参见:
-
Document.removeDocumentListener(javax.swing.event.DocumentListener)
-
getDocumentListeners
public DocumentListener[] getDocumentListeners()
返回在此文档上注册的所有文档侦听器的数组。- 结果
-
如果当前没有文档监听器注册,则本文档的所有内容为
DocumentListener
或空数组 - 从以下版本开始:
- 1.4
- 另请参见:
-
addDocumentListener(javax.swing.event.DocumentListener)
,removeDocumentListener(javax.swing.event.DocumentListener)
-
addUndoableEditListener
public void addUndoableEditListener(UndoableEditListener listener)
添加撤消侦听器以通知任何更改。 在UndoableEdit
上执行的撤消/重做操作将导致触发相应的DocumentEvent以使视图与模型保持同步。- Specified by:
-
addUndoableEditListener
,界面Document
- 参数
-
listener
- 要添加UndoableEditListener
- 另请参见:
-
Document.addUndoableEditListener(javax.swing.event.UndoableEditListener)
-
removeUndoableEditListener
public void removeUndoableEditListener(UndoableEditListener listener)
删除撤消侦听器。- Specified by:
-
removeUndoableEditListener
在界面Document
- 参数
-
listener
- 要删除的UndoableEditListener
- 另请参见:
-
Document.removeDocumentListener(javax.swing.event.DocumentListener)
-
getUndoableEditListeners
public UndoableEditListener[] getUndoableEditListeners()
返回在此文档上注册的所有可撤消编辑侦听器的数组。- 结果
-
如果当前没有注册可撤消的编辑侦听器,则此文档的所有内容都为
UndoableEditListener
或空数组 - 从以下版本开始:
- 1.4
- 另请参见:
-
addUndoableEditListener(javax.swing.event.UndoableEditListener)
,removeUndoableEditListener(javax.swing.event.UndoableEditListener)
-
getProperty
public final Object getProperty(Object key)
查找属性值的便捷方法。 它相当于:getDocumentProperties().get(key);
- Specified by:
-
getProperty
在界面Document
- 参数
-
key
- 非null
属性键 - 结果
-
该物业的价值或
null
- 另请参见:
-
getDocumentProperties()
-
putProperty
public final void putProperty(Object key, Object value)
用于存储属性值的便利方法。 它相当于:getDocumentProperties().put(key, value);
如果value
是null
此方法将删除该属性。- Specified by:
-
putProperty
在界面Document
- 参数
-
key
- 非null
密钥 -
value
- 该物业价值 - 另请参见:
-
getDocumentProperties()
-
remove
public void remove(int offs, int len) throws BadLocationException
从文档中删除一些内容。 删除内容会导致在实际更改发生时保持写锁定。 观察者会通知调用此方法的线程的更改。虽然大多数Swing方法都不是,但这种方法是线程安全的。 有关更多信息,请参阅Concurrency in Swing 。
- Specified by:
-
remove
在界面Document
- 参数
-
offs
- 起始偏移量> = 0 -
len
- 要删除的字符数> = 0 - 异常
-
BadLocationException
- 给定的删除位置不是文档中的有效位置 - 另请参见:
-
Document.remove(int, int)
-
replace
public void replace(int offset, int length, String text, AttributeSet attrs) throws BadLocationException
删除文本区域offset
到offset + length
,并将其替换为text
。 由实现如何实现,一些实现可以将其视为两个不同的操作:删除后跟插入,其他可以将替换视为一个原子操作。- 参数
-
offset
- 子元素的索引 -
length
- 要删除的文本长度,可能为0表示不删除任何内容 -
text
- 要插入的文本,null
表示不插入文本 -
attrs
- 表示插入文本属性的AttributeSet,null
是合法的,通常被视为空属性集,但是精确解释留给子类 - 异常
-
BadLocationException
- 给定位置不是文档中的有效位置 - 从以下版本开始:
- 1.4
-
insertString
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException
将一些内容插入到文档中。 插入内容会导致在实际更改发生时保持写入锁定,然后通知抓取写入锁定的线程上的观察者。虽然大多数Swing方法都不是,但这种方法是线程安全的。 有关更多信息,请参阅Concurrency in Swing 。
- Specified by:
-
insertString
在界面Document
- 参数
-
offs
- 起始偏移量> = 0 -
str
- 要插入的字符串; null / empty字符串不执行任何操作 -
a
- 插入内容的属性 - 异常
-
BadLocationException
- 给定的插入位置不是文档中的有效位置 - 另请参见:
-
Document.insertString(int, java.lang.String, javax.swing.text.AttributeSet)
-
getText
public String getText(int offset, int length) throws BadLocationException
从文档中获取一系列文本。- Specified by:
-
getText
在界面Document
- 参数
-
offset
- 起始偏移量> = 0 -
length
- 要检索的字符数> = 0 - 结果
- 文本
- 异常
-
BadLocationException
- 给定的范围包括不在文档中的有效位置的位置 - 另请参见:
-
Document.getText(int, int)
-
getText
public void getText(int offset, int length, Segment txt) throws BadLocationException
获取文档给定部分中包含的文本。如果txt参数上的partialReturn属性为false,则Segment中返回的数据将是请求的整个长度,可能是也可能不是副本,具体取决于数据的存储方式。 如果partialReturn属性为true,则仅返回可在不创建副本的情况下返回的文本量。 对于扫描文档的大部分内容的情况,使用部分返回将提供更好的性能。 以下是使用部分返回访问整个文档的示例:
int nleft = doc.getDocumentLength(); Segment text = new Segment(); int offs = 0; text.setPartialReturn(true); while (nleft > 0) { doc.getText(offs, nleft, text); // do something with text nleft -= text.count; offs += text.count; }
- Specified by:
-
getText
在界面Document
- 参数
-
offset
- 起始偏移量> = 0 -
length
- 要检索的字符数> = 0 -
txt
- 要将文本检索到的Segment对象 - 异常
-
BadLocationException
- 给定的范围包括不在文档中的有效位置的位置
-
createPosition
public Position createPosition(int offs) throws BadLocationException
返回一个位置,该位置将在文档更改时跟踪更改。虽然大多数Swing方法都不是,但这种方法是线程安全的。 有关更多信息,请参阅Concurrency in Swing 。
- Specified by:
-
createPosition
在界面Document
- 参数
-
offs
- 模型中的位置> = 0 - 结果
- 这个职位
- 异常
-
BadLocationException
- 如果给定位置不代表关联文档中的有效位置 - 另请参见:
-
Document.createPosition(int)
-
getStartPosition
public final Position getStartPosition()
返回表示文档开头的位置。 返回的位置可以计入跟踪更改并保持位于文档的开头。- Specified by:
-
getStartPosition
在界面Document
- 结果
- 这个职位
-
getEndPosition
public final Position getEndPosition()
返回表示文档末尾的位置。 返回的位置可以计入跟踪更改并保持位于文档的末尾。- Specified by:
-
getEndPosition
在界面Document
- 结果
- 这个职位
-
getRootElements
public Element[] getRootElements()
获取定义的所有根元素。 通常,只有一个,因此默认实现是返回默认的根元素。- Specified by:
-
getRootElements
在界面Document
- 结果
- 根元素
-
getDefaultRootElement
public abstract Element getDefaultRootElement()
返回视图应基于的根元素,除非提供了用于将视图分配给元素结构的其他机制。- Specified by:
-
getDefaultRootElement
in界面Document
- 结果
- 根元素
- 另请参见:
-
Document.getDefaultRootElement()
-
getBidiRootElement
public Element getBidiRootElement()
返回此文档的双向结构的根元素。 它的子代表具有给定的Unicode bidi级别的字符运行。- 结果
- 此文档的双向结构的根元素
-
getParagraphElement
public abstract Element getParagraphElement(int pos)
获取包含给定位置的段落元素。 子类必须自己定义一个段落的确切构成。 但是应该记住,段落至少应该是运行Unicode双向算法的文本单元。- 参数
-
pos
- 起始偏移量> = 0 - 结果
- 元素
-
getAttributeContext
protected final AbstractDocument.AttributeContext getAttributeContext()
获取管理属性的上下文。 此方法有效地建立了用于压缩AttributeSet信息的策略。- 结果
- 上下文
-
insertUpdate
protected void insertUpdate(AbstractDocument.DefaultDocumentEvent chng, AttributeSet attr)
作为文本插入的结果更新文档结构。 这将发生在写锁定中。 如果此类的子类重新实现此方法,则它也应该委托给超类。- 参数
-
chng
- 更改说明 -
attr
- 更改的属性
-
removeUpdate
protected void removeUpdate(AbstractDocument.DefaultDocumentEvent chng)
作为文本删除的结果更新任何文档结构。 在实际从内容中删除文本之前调用此方法。 这将发生在写锁定中。 如果此类的子类重新实现此方法,则它也应该委托给超类。- 参数
-
chng
- 更改说明
-
postRemoveUpdate
protected void postRemoveUpdate(AbstractDocument.DefaultDocumentEvent chng)
作为文本删除的结果更新任何文档结构。 从内容中删除文本后调用此方法。 这将发生在写锁定中。 如果此类的子类重新实现此方法,则它也应该委托给超类。- 参数
-
chng
- 更改说明
-
dump
public void dump(PrintStream out)
提供诊断转储。- 参数
-
out
- 输出流
-
getContent
protected final AbstractDocument.Content getContent()
获取文档的内容。- 结果
- 内容
-
createLeafElement
protected Element createLeafElement(Element parent, AttributeSet a, int p0, int p1)
创建文档叶元素。 钩子创建元素以表示文档结构。 由于此实现使结构和内容保持分离,因此在扩展内容时元素会自动增长,因此现有元素的分割将随之而来。 文档本身决定如何生成元素,以便灵活地使用所使用的元素类型。- 参数
-
parent
- 父元素 -
a
- 元素的属性 -
p0
- 范围的开头> = 0 -
p1
- 范围的结尾> = p0 - 结果
- 新元素
-
createBranchElement
protected Element createBranchElement(Element parent, AttributeSet a)
创建一个文档分支元素,可以包含其他元素。- 参数
-
parent
- 父元素 -
a
- 属性 - 结果
- 元素
-
getCurrentWriter
protected final Thread getCurrentWriter()
获取当前写入线程(如果有)。 这可用于区分方法是作为现有修改的一部分进行调用,还是需要获取锁定并启动新事务。- 结果
-
如果没有正在进行的修改,主动修改文档的线程或
null
-
writeLock
protected final void writeLock()
获取一个锁以开始改变此锁保护的文件。 为了获得锁定,可能没有写入,更改通知或继续阅读。 此外,只要不尝试从文档通知中获得额外的writeLock
,线程就可以获得多个writeLock
。 尝试从DocumentListener通知中获取writeLock
将导致IllegalStateException
。 每个线程获得多个writeLock
的能力允许子类获得writeLock,执行许多操作,然后释放锁。拨打
writeLock
必须通过调用来平衡writeUnlock
,否则Document
将处于锁定状态留下所以没有读或写可以做到的。- 异常
-
IllegalStateException
- 抛出非法锁定企图。 如果文档正确实现,则只有在文档侦听器尝试改变文档时才会发生这种情况。 这种情况违反了bean事件模型,其中无法保证传递顺序,并且在允许进一步突变之前应通知所有侦听器。
-
writeUnlock
protected final void writeUnlock()
释放先前通过writeLock
获得的写锁定。 如果没有未完成的锁定,则在减少锁定计数后,这将允许新的作者或读者。- 另请参见:
-
writeLock()
-
readLock
public final void readLock()
获取锁以开始从文档中读取某些状态。 可以同时有多个读者。 写入会阻止读者,直到完成对听众的更改通知。 应该非常小心地使用此方法,以避免文档的意外泄露。 它应始终与readUnlock
平衡。- 另请参见:
-
readUnlock()
-
readUnlock
public final void readUnlock()
读取是否解锁。 这表示其中一个读者完成了。 如果没有更多的读者,那么写作可以再次开始。 这应该与readLock平衡,并且应该在finally语句中进行,以便保证平衡。 以下是一个例子。readLock(); try { // do something } finally { readUnlock(); }
- 另请参见:
-
readLock()
-
-