- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经在我的代码中寻找一个问题超过4个小时了,但找不到它...问题是,我有一个带有一个JFrame的java类,我在其中放置了带有DefaultListModel的JList 。然后我有另一个 java 类,我尝试将项目添加到 DefaultListModel 中。问题是,除了将项目添加到 DefaultListModel 之外,一切正常。关于这里出了什么问题有什么想法吗?
主java类:
package ledpanelplayer;
imports; //IMPORTS
/**
*
* @author Dominik
*/
public class LedPanelPlayer extends JFrame {
public static String RUN_PATH;
public static String LIB_PATH;
public static String PREFERENCES_FILE;
public static String LOG_FILE;
public static file_helper f;
public static json_helper j;
public static Player player;
public static Preferences preferences;
public static Schedule s;
public static Console c;
public static JFrame WINDOW_FRAME;
public static int WINDOW_W;
public static int WINDOW_H;
public static String WINDOW_TITLE;
public static JList SCHEDULE_LIST;
public static DefaultListModel SCHEDULE_LIST_MODEL;
public static void main(String[] args) {
setLookAndFeel();
setUIFont(new javax.swing.plaf.FontUIResource("Arial",Font.PLAIN,12));
init(); //Init application
}
private static void setLookAndFeel() {} //Doesn't matter
public static void setUIFont (javax.swing.plaf.FontUIResource f){} //Doesn't matter
public static void init() {
RUN_PATH = new File("").getAbsolutePath()+"\\"; //Get local directory
LIB_PATH = RUN_PATH + "\\lib"; //Set libs directory
PREFERENCES_FILE = RUN_PATH + "\\preferences.lpp"; //Set preferences file path
LOG_FILE = RUN_PATH + "\\log.txt"; //Set log file path
f = new file_helper(); //Create new file_helper()
c = new Console(); //Create new Console()
c.init_files();
j = new json_helper(); //Create new json_helper()
player = new Player(); //Create new Player()
preferences = new Preferences(); //Create new Preferences()
s = new Schedule(); //Create new Schedule()
WINDOW_FRAME = new JFrame(); //Create new JFrame()
WINDOW_W = 800;
WINDOW_H = 540;
WINDOW_TITLE = "Demo";
WINDOW_FRAME.setSize(WINDOW_W,WINDOW_H);
WINDOW_FRAME.setLocationRelativeTo(null);
WINDOW_FRAME.setVisible(true);
WINDOW_FRAME.setTitle(WINDOW_TITLE);
WINDOW_FRAME.setDefaultCloseOperation(EXIT_ON_CLOSE);
WINDOW_FRAME.getContentPane().setLayout(null);
WINDOW_FRAME.getContentPane().setBackground(new Color(237, 237, 237));
WINDOW_FRAME.setResizable(false);
SCHEDULE_LIST_MODEL = new DefaultListModel();
SCHEDULE_LIST = new JList(SCHEDULE_LIST_MODEL); //Create new JList()
SCHEDULE_LIST.setBounds(20, 20, 382, 444);
SCHEDULE_LIST.setBackground(new Color(226,226,226));
//SCHEDULE_LIST_MODEL.addElement("<html><b>1.</b> Demo <p> duration: 10s | file: demo.mp4 | repeat: *36000</p></html>");
WINDOW_FRAME.add(SCHEDULE_LIST);
}
public static void addElement(String e) {
SCHEDULE_LIST_MODEL.addElement(e);
}
}
其他类:
public static void updateList() {
for (int i = 0; i < SCHEDULE.size(); i++) {
try {
JSONObject object = (JSONObject)SCHEDULE.get(i);
String name = object.get("name").toString();
String duration = object.get("duration").toString();
String file = object.get("file").toString();
String repeat = object.get("repeat").toString();
LedPanelPlayer.addElement("<html><b>"+i+".</b> "+name+" <p> duration: "+(Integer.parseInt(duration)/1000)+"s | file: "+file+" | repeat: *"+repeat+"</p></html>");
}
catch(Exception e) {e.printStackTrace();c.err("Schedule.updateList() : " + e.toString());}
}
}
提前谢谢您!
堆栈跟踪:
java.lang.NullPointerException
at ledpanelplayer.LedPanelPlayer.addElement(LedPanelPlayer.java:369)
at ledpanelplayer.Schedule.updateList(Schedule.java:69)
at ledpanelplayer.Preferences.load(Preferences.java:50)
at ledpanelplayer.LedPanelPlayer.init(LedPanelPlayer.java:142)
at ledpanelplayer.LedPanelPlayer.main(LedPanelPlayer.java:98)
最佳答案
虽然 VGR 的答案(移动 SCHEDULE_LIST_MODEL 以便在初始化首选项时它不为空)确实解决了您眼前的问题,但我认为您遇到的问题仅仅是循环依赖问题的症状,这将使维护您的程序变得乏味(正如您花了大约 4 个小时发现的那样),简单地移动 SCHEDULE_LIST_MODEL 被分配值的位置最多只是一个创可贴修复。
你的程序结构如下:LedPanelPlayer依赖于Preferences和Schedule,Preferences依赖于Schedule,Schedule依赖于LedPanelPlayer。您遇到的循环依赖问题在于 LedPanelPlayer 和 Schedule 都相互依赖才能发挥作用。 Schedule 需要 LedPanelPlayer.addElement,并且 LedPanelPlayer 构造了一个 Schedule(并且可能在您尚未发布的 LedPanelPlayer 的某些部分中使用了它,否则它只是闲逛且无用)。
考虑从 LedPanelPlayer 中完全删除 SCHEDULE_LIST_MODEL,并使其成为实际管理它的类 (Schedule) 的实例字段。然后将 Schedule.getScheduleListModel() 添加到 Schedule 中,以便任何需要处理调度的内容都可以简单地引用它,并使 updateList 不是静态的并引用 ScheduleListModel 的新家。由于 Preferences 想要处理调度信息,因此它的构造函数中需要一个调度实例。
这样,LedPanelPlayer将依赖于Preferences和Schedule,Preferences依赖于Schedule,但现在Schedule将不再依赖于LedPanelPlayer来正常运行,不仅解决了您眼前的问题,而且解决了根本原因(并使您的代码更容易阅读、理解和维护!)。
关于java - 向 JList 添加项目导致 java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31348512/
在 Tomcat 6/Ubuntu 12.04 上启动 Grails 2.1.0 应用程序时出现以下错误。 Error 500 - Internal Server Error. groovy.lang
在运行 Storm 拓扑时,我收到此错误。拓扑完美运行 5 分钟,没有任何错误,然后失败。我正在使用 Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS as 300 sec i
我有一个 jsp 代码在其中一台机器上运行良好。但是当我复制到另一台机器时,我得到了这个 no such method found 异常。我是 Spring 的新手。有人可以解释我错过了什么吗? 以下
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我的代码在下面给出了一个错误; Exception in thread "main" java.lang.NoSuchMethodError: com/myApp/Client.cypherCBC(L
我正在尝试一个 Restful web 服务示例,所以当我要访问 url 时,我遇到了异常 java.lang.NoSuchMethodError: jersey.repackaged.com.goo
我正在将一个 Spring web 项目转换为一个 Maven 项目,但我收到了这个错误: java.lang.NoSuchMethodError: org.jboss.logging.Logger.
在我的项目中,我有一个像这样的枚举: public enum MyEnum { FIRST(1), SECOND(2); private int value; private MyEnum(int v
我创建了这个简单的示例,用于读取 Linux 正常运行时间: public String getMachineUptime() throws IOException { String[] di
我正在使用 Eclipse,并且正在使用 Java。我的目标是使用 bogoSort 方法对 vector 进行排序在一个 vector (vectorExample)中适应我的 vector 类型,
我正在运行以下查询。它显示一条错误消息。如何解决这个错误? ListrouteList=null; List companyList = session.createS
我有以下模型类: @Entity @Table(name="user_content") @org.hibernate.annotations.NamedQueries({ @org.
我有那个错误。这是我的代码: GmailSettingsService service = new GmailSettingsService(APPLICATION_NAME, DOMAIN_NAME
实际上我在执行我的java程序时遇到了下面提到的错误 Exception in thread "pool-1-thread-1" java.lang.ClassCastException: jav
java.lang.ClassCastException: java.lang.Float cannot be cast to java.lang.String 我在以下代码中遇到此异常: Strin
我正在尝试从 linkedhashset 中检索随机元素。下面是我的代码,但它每次都给我异常。 private static void generateRandomUserId(Set userIds
我已经完成了 Android 中的代码: List spinnerArray = new ArrayList(); for (int i = 0; i item = (LinkedTreeMap)
这个问题已经有答案了: Explanation of ClassCastException in Java (12 个回答) 已关闭 6 年前。 我已经编写了 java 到 Json 的代码,同时从页
这个问题在这里已经有了答案: ClassCastException java.lang.Long cannot be cast to clojure.lang.IFn (4 个答案) 关闭 6 年前
我在运行时遇到问题来编译这段代码,这给我一个错误,java.lang.Integer 无法转换为 Java.lang.Double。如果有人帮助我更正此代码,我将非常高兴 double x; pu
我是一名优秀的程序员,十分优秀!