我正在编写一个带有工具栏颜色的下拉组件.所以我从'Swing hacks'一书中提出了想法,稍微改变了构思并添加了Swing的标准JColorChooser.行为应该遵循:我点击一个按钮,出现一个带有颜色选择器的窗口; 我选择一种颜色,然后关闭下拉窗口,按钮的文字将颜色变为所选颜色.总的来说一切正常,但有一个令人不快的错误.在这些操作之后,UI冻结,按钮甚至不接受鼠标事件,如"鼠标悬停".这发生在我点击之前.然后,UI表现为所需.
这是带有概念的代码.
import java.awt.AWTEvent;
import java.awt.Color;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JWindow;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.colorchooser.AbstractColorChooserPanel;
import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.plaf.metal.MetalComboBoxIcon;
class DropDownComponent2 {
private JWindow _window;
private boolean _windowShouldBeShown = false;
private JComponent _component;
private AbstractButton _button;
private JFrame _ownerFrame;
public DropDownComponent2(JFrame …Run Code Online (Sandbox Code Playgroud) 我使用makecert实用程序生成了带私钥的X509证书
makecert -n "CN=RootCATest" -r -sv RootCATest.pvk RootCATest.cer
makecert -sk MyKeyName -iv RootCATest.pvk -n "CN=tempCert" -ic RootCATest.cer -sr currentuser -ss my -sky signature —pe
Run Code Online (Sandbox Code Playgroud)
然后我用OpenSSL将RootCATest.pvk转换为RootCATest.pem.我提取了公钥:pubRootCATest.pem
我有一个名为'msg'的小文件.我使用SHA1签署此文件.
openssl dgst -sha1 -sign c:\RootCATest.pem -out c:\openssl c:\msg
Run Code Online (Sandbox Code Playgroud)
然后我想使用MS CryptoAPI获得相同的数字签名.
这是我的代码(注意:这是理解概念的代码所以我没有释放分配的内存)
void SwapBytes(BYTE *pv, int n)
{
BYTE *p = pv;
int lo, hi;
for(lo=0, hi=n-1; hi>lo; lo++, hi--)
{
BYTE tmp=p[lo];
p[lo] = p[hi];
p[hi] = tmp;
}
}
void sign()
{
FILE *file;
BYTE *msg;
int msg_size;
HCRYPTPROV hProv;
HCERTSTORE hStore;
PCCERT_CONTEXT …Run Code Online (Sandbox Code Playgroud) 我正在使用XmlReader来验证Xml对抗Xsd.
当我验证这个xml
<?xml version="1.0" encoding="utf-8" ?>
<A><B>sdf</B></A>
Run Code Online (Sandbox Code Playgroud)
针对此架构:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="B" type="xs:string" />
<xs:element name="A">
<xs:complexType>
<xs:sequence>
<xs:element ref="B"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
验证没问题.
但是如果我添加命名空间:
<?xml version="1.0" encoding="utf-8" ?>
<A xmlns="myns"><B>sdf</B></A>
Run Code Online (Sandbox Code Playgroud)
和相应的架构:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="myns">
<xs:element name="B" type="xs:string" />
<xs:element name="A">
<xs:complexType>
<xs:sequence>
<xs:element ref="B"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
我接受System.Xml.Schema.XmlSchemaValidationException:未声明'B'元素.为什么会这样?我该如何添加命名空间?