我有一个反应组件,它在 componentWillMount 中进行 AJAX 调用,并支持接收到的数据以响应 redux 存储。这是代码
componentWillMount() {
var self = this;
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState === 4 && this.status === 200) {
console.log(this.responseText);
var json = JSON.parse(this.responseText);
var data = {
json
};
self.props.dispatch({
type: "ADD_Exams",
data
});
}
};
xmlhttp.open("GET", "http://127.0.0.1:8000/getExams/", true);
xmlhttp.send();
}
Run Code Online (Sandbox Code Playgroud)
在减速器中,我将在操作中接收到的数据分配给减速器状态中定义的数组。
const initialState = {
exams:[]
}
const examreducer = (state = initialState, action) => {
switch (action.type) {
case "ADD_Exams":
return {
...state,
exams: [...state.exams, …Run Code Online (Sandbox Code Playgroud) 我正在使用 stackover flow 上发布的一段代码将自定义元数据写入 PNG 图像并读取它。write 函数似乎工作正常,但是当我尝试读取我编写的数据时,它会抛出 NullPointerException。有人可以告诉我出了什么问题吗?
这是编写元数据的代码
try{
image=ImageIO.read(new FileInputStream("input.png"));
writeCustomData(image, "software", "FRDDC");
ImageIO.write(image, "png", new File("output.png"));
}
catch(Exception e){
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
写入元数据的方法
public static byte[] writeCustomData(BufferedImage buffImg, String key, String value) throws Exception {
ImageWriter writer = ImageIO.getImageWritersByFormatName("png").next();
ImageWriteParam writeParam = writer.getDefaultWriteParam();
ImageTypeSpecifier typeSpecifier = ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_RGB);
//adding metadata
javax.imageio.metadata.IIOMetadata metadata = writer.getDefaultImageMetadata(typeSpecifier, writeParam);
IIOMetadataNode textEntry = new IIOMetadataNode("tEXtEntry");
textEntry.setAttribute("keyword", key);
textEntry.setAttribute("value", value);
IIOMetadataNode text = new IIOMetadataNode("tEXt");
text.appendChild(textEntry);
IIOMetadataNode root = new IIOMetadataNode("javax_imageio_png_1.0");
root.appendChild(text);
metadata.mergeTree("javax_imageio_png_1.0", …Run Code Online (Sandbox Code Playgroud) 我有两个JFrame A和B.我有一个gif在框架A上运行.经过一段时间我想关闭框架A和显示框架B.我使用下面的代码但它会在程序执行后立即触发操作.我该如何解决这个问题?
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
new FrameB().setVisible(true);
}
};
Timer timer = new Timer(100 ,taskPerformer);
timer.setRepeats(false);
timer.start();
Run Code Online (Sandbox Code Playgroud)