在 Codename One Project 中将文本框添加到我的类后出现 java.lang 错误消息

问题描述 投票:0回答:1

使用 NetBeans 18,开发一个使用 Initializr 构建的 Codename One 应用程序。 我通过重新创建项目并传输所有内容解决了最后一个问题。现在我开始添加元素,我解决了代码中需要纠正的问题,并且项目将构建。我已经注释掉了需要处理的元素,试图在模拟器中获得总体外观。 当我尝试运行该应用程序时,出现以下错误。我查看了 CodenameOneImplementation.createFont,没有发现 Codename One 库中的 createFont 实例有任何问题。


`your text`java.lang.NullPointerException: Cannot invoke "com.codename1.impl.CodenameOneImplementation.createFont(int, int, int)" because "i" is null
    at com.codename1.ui.Font.<init>(Font.java:99)
    at com.codename1.ui.Font.createSystemFont(Font.java:399)
    at com.codename1.ui.plaf.UIManager.resetThemeProps(UIManager.java:427)
    at com.codename1.ui.plaf.UIManager.<init>(UIManager.java:108)
    at com.codename1.ui.plaf.UIManager.getInstance(UIManager.java:126)
    at com.codename1.ui.Component.getUIManager(Component.java:951)
    at com.codename1.ui.Component.<init>(Component.java:722)
    at com.codename1.ui.TextArea.<init>(TextArea.java:423)
    at com.codename1.ui.TextArea.<init>(TextArea.java:298)
    at com.codename1.ui.TextField.<init>(TextField.java:265)
    at com.kcconsulting.soccersession.SoccerSession.<init>(SoccerSession.java:37)
    at `your text`java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstruct`your text`orHandleAccessor.java:67)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
    at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128)
    at `your text`java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:304)
    at java.base/java.lang.Class.newInstance(Class.java:685)
    at com.codename1.impl.javase.Executor$3.run(Executor.java:266)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
    at `your text`java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Java Result: 1

这是我的应用程序设置:

    package com.kcconsulting.soccersession;
    import static com.codename1.ui.CN.*;
    import com.codename1.ui.Display;
    import com.codename1.ui.Form;
    import com.codename1.ui.Container;
    import com.codename1.ui.Dialog;
    import com.codename1.ui.Label;
    import com.codename1.ui.Button;
    import com.codename1.ui.plaf.UIManager;
    import com.codename1.ui.util.Resources;
    import com.codename1.io.Log;
    import com.codename1.ui.Toolbar;
    import java.io.IOException;
    import com.codename1.ui.layouts.BoxLayout;
    import com.codename1.io.NetworkEvent;
    import com.codename1.ui.layouts.BorderLayout;
    import com.codename1.ui.layouts.Layout;
    import com.codename1.io.NetworkEvent;
    import com.codename1.ui.Image;
    import com.codename1.ui.TextField;
    import static com.codename1.ui.layouts.BorderLayout.centerEastWest;
    import static com.codename1.ui.layouts.BoxLayout.Y_AXIS;
    import com.codename1.ui.table.TableLayout;
    /**
     * 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 SoccerSession {
        private Form current = new Form();
        private Resources theme;
        private Label sessionLabel = new Label("Name");            
        public void init(Object context) {
        // use two network threads instead of one
            updateNetworkThreadCount(2);
            theme = UIManager.initFirstTheme("/scr/css/theme.css");
        // 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;            }
        
             Button r = new Button("Rondos");
             Button p = new Button("Plays");
             Button n = new Button("New");
             Button s = new Button("Capture Screen");
             Container headerContainer = new Container();
             Container bodyContainer = new Container();
//        Container sessionName = new Container(tl);
 //       String pathToImageSortBy = "soccersession/src/main/resources/WorkingField";
 //       Image bg = protected Image(Object image);
 //       bg = new Image(getClass().getClassLoader().getResource(pathToImageSortBy));
       
//  bodyContainer.addImage(bg);
            Container footerBar = new Container();
            Container footerContainer = new Container();
            Container leftPanel = new Container();
            Container rightPanel = new Container();
 //       Container maincontainer = new Container(new BorderLayout());
            BorderLayout forSession = new BorderLayout();
 //       forSession.setLayout(centerEastWest(sessionText, null, sessionLabel))
            footerContainer.setLayout(new BorderLayout(centerEastWest(sessionText, null, sessionLabel)));
            BoxLayout bl = new BoxLayout(Y_AXIS);
            leftPanel.setLayout(bl);
            rightPanel.setLayout(bl);        
            TableLayout tl = new TableLayout(1, 3); 
            footerBar.add(tl.createConstraint().widthPercentage(20).heightPercentage(100), n);
            footerBar.add(tl.createConstraint().widthPercentage(60).heightPercentage(100), footerContainer);
            footerBar.add(tl.createConstraint().widthPercentage(20).heightPercentage(100), s);     
            Form hi = new Form("Welcome to Soccer Session - Landscape Orientation", new BorderLayout());
            hi.add(BorderLayout.CENTER, bodyContainer).
            add(BorderLayout.SOUTH, footerBar).
            add(BorderLayout.NORTH, headerContainer).
            add(BorderLayout.EAST, rightPanel).
            add(BorderLayout.WEST, leftPanel);
            leftPanel.add(r);
            leftPanel.add(p);     
            hi.show();     
        }
        public void stop() {
            current = getCurrentForm();
            if(current instanceof Dialog) {
                ((Dialog)current).dispose();
                current = getCurrentForm();
            }
        }   
        public void destroy() {
        }
   }

我很困惑为什么应用程序试图创建新字体,因为我还不需要它。我查看了 2 个论坛,但找不到任何 createFont 实例,尽管有一些空错误实例。 我是否需要逐一检查这 27 个实例,或者我可以在代码中更正这个问题吗?如果不使用模拟器,我就无法开始改变外观。谢谢。

java codenameone
1个回答
0
投票

我回答了这里复制供参考。

我假设

SoccerSession
是你的主要课程。请注意,您的代码位于该类的构造函数中。应该是
init(Object)
start()
方法。

字体始终存在,这是默认的系统字体。问题是,由于

init(Object)
尚未被调用,这意味着 Codename One 本身在此阶段尚未完成加载。实施本身还没有准备好。

© www.soinside.com 2019 - 2024. All rights reserved.