codenameone - Codenameone BrowserComponent.setProperty 给出 NullPointerException
问题描述
直到今天,我的代码一直运行良好。但是,在使用 Crisp CN1lib 时,我刚刚开始获得 NPE。事实证明 BrowserComponent.setProperty() 是罪魁祸首。这是我的堆栈跟踪
java.lang.NullPointerException
at com.codename1.impl.javase.JavaSEPort.setBrowserProperty(JavaSEPort.java:11340)
at com.codename1.ui.BrowserComponent.setProperty(BrowserComponent.java:607)
看起来是 JavaSEPort.setBrowserProperty() 造成的。Github 显示代码是 2 天前编辑的,所以可能有问题。
我的代码非常基本:
import static com.codename1.ui.CN.*;
import com.codename1.ui.Form;
import com.codename1.ui.Dialog;
import com.codename1.ui.plaf.UIManager;
import com.codename1.ui.util.Resources;
import com.codename1.io.Log;
import com.codename1.ui.BrowserComponent;
import com.codename1.ui.Toolbar;
import com.codename1.ui.events.ActionEvent;
import com.codename1.ui.events.ActionListener;
import com.codename1.ui.layouts.BorderLayout;
/**
* This file was generated by <a href="https://www.codenameone.com/">Codename One</a> for the purpose
* of building native mobile applications using Java.
*/
public class MyApplication {
private Form current;
private Resources theme;
public void init(Object context) {
// use two network threads instead of one
updateNetworkThreadCount(2);
theme = UIManager.initFirstTheme("/theme");
// Enable Toolbar on all Forms by default
Toolbar.setGlobalToolbar(true);
// Pro only feature
Log.bindCrashProtection(true);
addNetworkErrorListener(err -> {
// prevent the event from propagating
err.consume();
if(err.getError() != null) {
Log.e(err.getError());
}
Log.sendLogAsync();
Dialog.show("Connection Error", "There was a networking error in the connection to " + err.getConnectionRequest().getUrl(), "OK", null);
});
}
public void start() {
if(current != null){
current.show();
return;
}
BrowserComponent browser = new BrowserComponent();
browser.addWebEventListener(BrowserComponent.onLoad, new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
}
});
browser.setProperty("UseWideViewPort", true);
browser.setProperty("LoadWithOverviewMode", true);
browser.setProperty("DatabaseEnabled", true);
browser.setProperty("BuiltInZoomControls", true);
browser.setProperty("DisplayZoomControls", false);
browser.setProperty("WebContentsDebuggingEnabled", true);
browser.setFireCallbacksOnEdt(true);
browser.setURL("https://www.instagram.com/brianabette/");
Form hi = new Form("Hi World", new BorderLayout());
hi.add(BorderLayout.CENTER, browser);
hi.show();
}
public void stop() {
current = getCurrentForm();
if(current instanceof Dialog) {
((Dialog)current).dispose();
current = getCurrentForm();
}
}
public void destroy() {
}
}
任何指针?可能是虫子?
解决方案
我们刚刚对 BrowserComponent 进行了一些性能改进。看起来我们在这里错过了一个地方,所以有一个回归。它已经在 Git 中修复,并将包含在下周五的下一次更新中。
推荐阅读
- bash - 排序命令(MacOS 终端)给出不一致的结果
- c# - 如何让第三方 Blazor 组件在 Razor 页面中工作?
- java - 在派生类对象上调用父类函数(Java)
- javascript - XMLHttpRequest 在 eventListener 点击之前抢先加载 json
- sql - SQL CASE 语句返回重复值
- php - PHP json_decode 显示成表格
- php - NetSuite Suitetalk API - 自上次修改后获取客户,忽略特定字段
- javascript - 使用过滤器 javascript 过滤多个类别
- python-3.x - 初学者:类型错误:
() 得到了一个意外的关键字参数“func_names” - html - 减少单选标签线之间的空间