diff --git a/jar/PDFLibrary.jar b/jar/PDFLibrary.jar index a84f0a47db0f9118d4d5767447dd11300870eb3e..7b21ca8413ae0c95bc5dc7898749f241d2bc89ee 100644 Binary files a/jar/PDFLibrary.jar and b/jar/PDFLibrary.jar differ diff --git a/lib/BDPost.jar b/lib/BDPost.jar index cfc381f61eaf70aea7fc8412e133b7c47f600d45..38cd5d131c90335dd1e5a82e127dec61b90c6bf6 100644 Binary files a/lib/BDPost.jar and b/lib/BDPost.jar differ diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Util/DataContainer.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Util/DataContainer.java index a5b0959b88e51dfb13363ef7112403eb19a8cdad..9865da4ea81fc5a501617320c23d46263c82db09 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Util/DataContainer.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Util/DataContainer.java @@ -11,6 +11,7 @@ import fybug.nulll.pdfunctionlibrary.Processing.CheckObject; import fybug.nulll.pdfunctionlibrary.Processing.Stop.MaybeStop; import fybug.nulll.pdfunctionlibrary.Processing.Stop.Stop; import fybug.nulll.pdfunctionlibrary.lang.CanEmpty; +import fybug.nulll.pdfunctionlibrary.lang.Cleanable; import fybug.nulll.pdfunctionlibrary.lang.ConsistentField; import fybug.nulll.pdfunctionlibrary.lang.MaybeSynchronized; @@ -30,7 +31,7 @@ import static fybug.nulll.pdfunctionlibrary.Processing.CheckUtil.checkArrayTable * @param 要存放的对象类型 * * @author fybug - * @version 0.0.5 + * @version 0.0.6 * @see Stop * @see ConsistentField * @see CanEmpty @@ -103,7 +104,10 @@ class DataContainer extends ConsistentField implements Cloneable, CanEmpty { @NotNull @MaybeStop protected - V getValue() {return (V) checkArrayTable(value);} + V getValue() { + Cleanable.checkClose(Cleanable.errmessage, value); + return (V) checkArrayTable(value); + } /* * Check @@ -194,7 +198,7 @@ class DataContainer extends ConsistentField implements Cloneable, CanEmpty { *

已实现基本抽象并处理并发

* * @author fybug - * @version 0.0.1 + * @version 0.0.2 * @see DataContainer * @since PDF 1.2 expander 2 */ @@ -215,6 +219,7 @@ class DataContainer extends ConsistentField implements Cloneable, CanEmpty { @NotNull protected DataContainer setValue(@Nullable final V value) { + Cleanable.checkClose(Cleanable.errmessage, value); @Nullable final Object[] v; synchronized ( this ){ @@ -248,7 +253,7 @@ class DataContainer extends ConsistentField implements Cloneable, CanEmpty { *

已实现基本抽象但未处理并发

* * @author fybug - * @version 0.0.1 + * @version 0.0.2 * @see DataContainer * @since PDF 1.2 expander 2 */ @@ -269,6 +274,7 @@ class DataContainer extends ConsistentField implements Cloneable, CanEmpty { @NotNull protected DataContainer setValue(@Nullable final V value) { + Cleanable.checkClose(Cleanable.errmessage, value); @Nullable final Object[] v; v = this.value; if (CheckObject.checkNull(v).length < 1) diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Util/DataMap.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Util/DataMap.java index 535083ae1ce3160758012c4f05f1c97160e00527..34b4c150a80304c48a8db56bc9f9c195bba17e36 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Util/DataMap.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Util/DataMap.java @@ -281,9 +281,9 @@ class DataMap extends DataGrid { @NoSynchronized public Object clone() throws CloneNotSupportedException { - @NotNull final Synchronized dataContainer = - (Synchronized) super.clone(); - ((Synchronized) dataContainer).keyLock = new Object(); + @NotNull final DataMap.Synchronized dataContainer = + (DataMap.Synchronized) super.clone(); + ((DataMap.Synchronized) dataContainer).keyLock = new Object(); return dataContainer; } diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/lang/Cleanable.java b/src/main/java/fybug/nulll/pdfunctionlibrary/lang/Cleanable.java index 45de8c34dc977761bb478e637e671a69def6e3a2..483f67105d80b3f44bdad1d74434b2237234209f 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/lang/Cleanable.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/lang/Cleanable.java @@ -1,4 +1,8 @@ package fybug.nulll.pdfunctionlibrary.lang; +import com.sun.istack.internal.NotNull; + +import org.jetbrains.annotations.Nls; + import java.io.Closeable; /** *

可释放对象.

@@ -13,12 +17,19 @@ import java.io.Closeable; * * * @author fybug - * @version 0.0.6 + * @version 0.0.7 * @see Closeable * @since PDF 1.2 */ public interface Cleanable extends Closeable { + /** + *

通用错误信息.

+ * + * @since PDF 1.3 expander 3 fix 1 + */ + @NotNull String errmessage = "该对象已被关闭"; + /** *

清空.

*
@@ -54,4 +65,23 @@ interface Cleanable extends Closeable {
      */
     @Override
     void close();
+
+    /**
+     * 

检查是否本对象已被关闭.

+ *
+     * 关闭对象时通常会将一些私有变量设置为 {@code null} ,通过传入这些变量进行检查
+     * 并在合适的时候抛出错误
+     * 
+ * + * @param messg 抛出的错误信息 + * @param o 要检查的变量 + * + * @since PDF 1.3 expander 3 fix 1 + */ + static + void checkClose(@NotNull @Nls String messg, @NotNull final Object... o) { + for ( int i = 0; i < o.length; i++ ) + if (o[i] == null) + throw new Error(messg); + } } diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/lang/CloseAll.java b/src/main/java/fybug/nulll/pdfunctionlibrary/lang/CloseAll.java index 8106efae7c1c66339d6db41ecbed3e81559cd66d..2acc54f8e6577bf80c569acfee18846ac8ad3956 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/lang/CloseAll.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/lang/CloseAll.java @@ -17,7 +17,7 @@ import fybug.nulll.pdfunctionlibrary.Util.Processing.Arrarys; *
* * @author fybug - * @version 0.0.6 + * @version 0.0.7 * @see ConsistentField * @see AutoCloseable * @see MaybeSynchronized @@ -95,6 +95,7 @@ class CloseAll extends ConsistentField implements AutoCloseable, MaybeSynchroniz @NotNull public CloseAll toSynchronized() { + Cleanable.checkClose(Cleanable.errmessage, linkedList); if (this instanceof Synchronized) return this; @NotNull final CloseAll c = new Synchronized(); @@ -114,6 +115,7 @@ class CloseAll extends ConsistentField implements AutoCloseable, MaybeSynchroniz @NotNull public CloseAll removerSynchronized() { + Cleanable.checkClose(Cleanable.errmessage, linkedList); if (this instanceof CloseALL) return this; @NotNull final CloseAll c = new CloseALL(); @@ -189,7 +191,7 @@ class CloseAll extends ConsistentField implements AutoCloseable, MaybeSynchroniz *

{@link CloseAll} 的并发处理类.

* * @author fybug - * @version 0.0.1 + * @version 0.0.2 * @see CloseAll * @since PDF 1.2 expander 2 */ @@ -205,6 +207,7 @@ class CloseAll extends ConsistentField implements AutoCloseable, MaybeSynchroniz @NotNull public CloseAll append(@Nullable final AutoCloseable... close) { + Cleanable.checkClose(Cleanable.errmessage, linkedList); Arrarys.conversionArrayType(close, (v) -> { // 仅锁住该部分,可在添加的同时进行关闭 synchronized ( this ){ @@ -241,7 +244,7 @@ class CloseAll extends ConsistentField implements AutoCloseable, MaybeSynchroniz *

{@link CloseAll} 的非并发处理类.

* * @author fybug - * @version 0.0.1 + * @version 0.0.2 * @see CloseAll * @since PDF 1.2 expander 2 */ @@ -257,6 +260,7 @@ class CloseAll extends ConsistentField implements AutoCloseable, MaybeSynchroniz @NotNull public CloseAll append(@Nullable final AutoCloseable... close) { + Cleanable.checkClose(Cleanable.errmessage, linkedList); Arrarys.conversionArrayType(close, (v) -> { linkedList.add(v); return null;