【问题标题】:Java Runtime ExceptionJava 运行时异常
【发布时间】:2010-05-17 14:17:04
【问题描述】:

当我运行我的应用程序时,我收到以下错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at javax.swing.text.FlowView$FlowStrategy.layoutRow(FlowView.java:546)
    at javax.swing.text.FlowView$FlowStrategy.layout(FlowView.java:460)
    at javax.swing.text.FlowView.layout(FlowView.java:184)
    at javax.swing.text.BoxView.setSize(BoxView.java:380)
    at javax.swing.text.BoxView.updateChildSizes(BoxView.java:349)
    at javax.swing.text.BoxView.setSpanOnAxis(BoxView.java:331)
    at javax.swing.text.BoxView.layout(BoxView.java:691)
    at javax.swing.text.BoxView.setSize(BoxView.java:380)
    at javax.swing.plaf.basic.BasicTextUI$RootView.setSize(BasicTextUI.java:1702)
    at javax.swing.plaf.basic.BasicTextUI.modelToView(BasicTextUI.java:1034)
    at javax.swing.text.DefaultCaret.repaintNewCaret(DefaultCaret.java:1291)
    at javax.swing.text.DefaultCaret$1.run(DefaultCaret.java:1270)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

由于该错误未提及我的任何课程,我将如何查找导致此问题的原因?

如果我尝试:public void notifyChatMessage(String message){...} 错误消失(不)。

编辑:经过进一步测试,结果发现上面也产生了错误。

但如果我尝试:public void notifyChatMessage(Object message){...} 则会报告错误。

请指教。

编辑:

        public void notifyChatMessage(String message){


         AppMessage appMessage = new AppMessage(AppMessage.Target.Chat, message);
         setChanged();
         notifyObservers(appMessage);

     }

应用消息:

public class AppMessage implements Serializable {

/**
 * Message header for target: game, chat
 */
public enum Target {
    Game, Chat
}

/**
 * Holds target
 */
public Target target;

/**
 * Holds state message
 */
public Object message;

/**
 * Construct using parameter data
 * @param target
 * @param message
 */
public AppMessage(Target target, Object message){

    this.target = target;
    this.message = message;

}

}

编辑:即使有错误报告,程序继续运行,我看不到任何性能不足,即。运行时出错,这使得定位问题的任务变得更加复杂。

编辑:当我通过 netbeans 中的调试器运行它时,我得到:调试器在无法编译的源代码上停止。

编辑:由于跨线程 GUI 更新而引发异常。调查 invokeLater 和 invokeAndWait 的解决方案。

解决方案: invokeAndWait

【问题讨论】:

  • 您能否发布更多关于错误发生位置的代码?
  • 您正在传递一个空参数,该参数对一种方法很好,但对另一种方法错误。发布更多代码。
  • 这就是我所说的..错误不会自行本地化..我不知道。
  • 您已经成功识别了notifyChatMessage() 方法;你从哪里称呼它?你在里面做什么?
  • @Yuval A:可能但具体在哪里?!如果它没有在我的代码中提及位置,我该如何找到它。很好的提示。我将不得不慢慢修改整个代码。

标签: java swing exception-handling


【解决方案1】:

调用javax.swing.text.FlowView$FlowStrategy.layoutRow(FlowView.java:546) 正在尝试处理NULL 的内容。看着它的签名。 layoutRow(FlowView fv, int rowIndex, int pos) 唯一可以是NULLFlowView fv,因为int 原语不能是NULL。因此,如果没有运行代码和逐步调试,我会说某处没有设置 FlowView 或将其设置为 NULL

【讨论】:

  • 其实就是viewBuffer,它为null,FlowView类的一个字段。
【解决方案2】:

使用源码...从javax.swing.text.FlowView第546行开始

【讨论】:

  • 我试过了,但那是 Java lib 代码,我不知道它是否准确。
  • @Lord Torgamus 不错,但可能是错误的版本,因为该源文件中的最后一行是 412。正确的 java 文件将在 src.zip
  • 你可能是对的。出于这个原因,我几乎没有发布链接,但我认为这是由于 docjar 自动化剪断了静态类,更改了行号而不是代码。不管怎样,使用src.zip 将是铁定的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
  • 2018-09-09
  • 2012-09-05
  • 2017-05-28
  • 2017-08-03
  • 2014-02-26
相关资源
最近更新 更多