为什么这段代码会抛出java.lang.NullPointerException?

2024-02-04

我找到了一个源代码,并将其添加到我的框架中,只是为了测试它使用 Java2D。 但它有一个例外。我不明白为什么。

我的课:

package ClientGUI;




import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.RenderingHints;
import java.awt.geom.CubicCurve2D;
import java.awt.geom.PathIterator;
import java.awt.geom.Point2D;
import java.awt.image.BufferedImage;

/**
 *
 * @author ICC
 */

public class SignInFrame extends javax.swing.JFrame implements Runnable {

private static int iw,  ih,  iw2,  ih2;
private static Image img;
private static final int FORWARD = 0;
private static final int BACK = 1;

// the points of the curve
private Point2D pts[];

// initializes direction of movement forward, or left-to-right
private int direction = FORWARD;
private int pNum;
private int x,  y;
private Thread thread;
private BufferedImage bimg;

/** Creates new form SignInFrame */
public SignInFrame() {
    initComponents();
    img = getToolkit().getImage(Image.class.getResource("Yahoo-Messanger.jpg"));
    try {
        MediaTracker tracker = new MediaTracker(this);
        tracker.addImage(img, 0);
        tracker.waitForID(0);
    } catch (Exception e) {
    }
    iw = img.getWidth(this);
    ih = img.getHeight(this);
    iw2 = iw / 2;
    ih2 = ih / 2;

}

public void reset(int w, int h) {
    pNum = 0;
    direction = FORWARD;

    // initializes the cubic curve
    CubicCurve2D cc = new CubicCurve2D.Float(
            w * .2f, h * .5f, w * .4f, 0, w * .6f, h, w * .8f, h * .5f);

    // creates an iterator to define the boundary of the flattened curve
    PathIterator pi = cc.getPathIterator(null, 0.1);
    Point2D tmp[] = new Point2D[200];
    int i = 0;

    // while pi is iterating the curve, adds points to tmp array
    while (!pi.isDone()) {
        float[] coords = new float[6];
        switch (pi.currentSegment(coords)) {
            case PathIterator.SEG_MOVETO:
            case PathIterator.SEG_LINETO:
                tmp[i] = new Point2D.Float(coords[0], coords[1]);
        }
        i++;
        pi.next();
    }
    pts = new Point2D[i];

    // copies points from tmp to pts
    System.arraycopy(tmp, 0, pts, 0, i);
}

public void step(int w, int h) {
    if (pts == null) {
        return;
    }
    x = (int) pts[pNum].getX();
    y = (int) pts[pNum].getY();
    if (direction == FORWARD) {
        if (++pNum == pts.length) {
            direction = BACK;
        }
    }
    if (direction == BACK) {
        if (--pNum == 0) {
            direction = FORWARD;
        }
    }
}

public void drawDemo(int w, int h, Graphics2D g2) {
    g2.drawImage(img,
            0, 0, x, y,
            0, 0, iw2, ih2,
            this);
    g2.drawImage(img,
            x, 0, w, y,
            iw2, 0, iw, ih2,
            this);
    g2.drawImage(img,
            0, y, x, h,
            0, ih2, iw2, ih,
            this);
    g2.drawImage(img,
            x, y, w, h,
            iw2, ih2, iw, ih,
            this);
}

public Graphics2D createGraphics2D(int w, int h) {
    Graphics2D g2 = null;
    if (bimg == null || bimg.getWidth() != w || bimg.getHeight() != h) {
        bimg = (BufferedImage) createImage(w, h);
        reset(w, h);
    }
    g2 = bimg.createGraphics();
    g2.setBackground(getBackground());
    g2.clearRect(0, 0, w, h);
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
    g2.setRenderingHint(RenderingHints.KEY_RENDERING,
            RenderingHints.VALUE_RENDER_QUALITY);
    return g2;
}

@Override
public void paint(Graphics g) {
    Dimension d = getSize();
    step(d.width, d.height);
    Graphics2D g2 = createGraphics2D(d.width, d.height);
    drawDemo(d.width, d.height, g2);
    g2.dispose();
    g.drawImage(bimg, 0, 0, this);
}

public void start() {
    thread = new Thread(this);
    thread.setPriority(Thread.MIN_PRIORITY);
    thread.start();
}

public synchronized void stop() {
    thread = null;
}

public static void main(String argv[]) {

    SignInFrame f = new SignInFrame();





    f.start();
}

public void run() {

    Thread me = Thread.currentThread();
    while (thread == me) {
        repaint();
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            break;
        }
    }
    thread = null;
}}

例外:



  init:
  deps-jar:
  Compiling 1 source file to C:\Users\ICC\Documents\NetBeansProjects\YahooServer\build\classes
  compile-single:
  run-single:
  Uncaught error fetching image:
  java.lang.NullPointerException
          at sun.awt.image.URLImageSource.getConnection(URLImageSource.java:97)
          at sun.awt.image.URLImageSource.getDecoder(URLImageSource.java:107)
          at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:240)
          at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172)
          at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136)
  

违规行在这里img = getToolkit().getImage(Image.class.getResource("Yahoo-Messanger.jpg"));确保文件存在请参阅此文档以查看资源加载的顺序getResource 的 Java 文档 http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ClassLoader.html#getResource(java.lang.String)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么这段代码会抛出java.lang.NullPointerException? 的相关文章

  • Java - 因内存不足错误而关闭

    关于如何最好地处理这个问题 我听到了非常矛盾的事情 并且陷入了以下困境 OOME 会导致一个线程崩溃 但不会导致整个应用程序崩溃 我需要关闭整个应用程序 但不能 因为线程没有剩余内存 我一直认为最佳实践是让它们离开 这样 JVM 就会死掉
  • 如何从Firebase Firestore实时更新文档中获取修改后的字段或数据? [复制]

    这个问题在这里已经有答案了 我有多个文档 我的问题是我无法获取修改的特定数据 我正在获取完整的文档 db collection employees whereEqualTo OID OID addSnapshotListener new E
  • Guice 忽略注入构造函数参数上的 @Nullable

    我正在使用 Guice v 3 0 并且有一个值被注入到构造函数中 该值可以为 null 因此我在构造函数中使用 Nullable 来自 javax annotations 注释了该参数 public MyClass Parameter1
  • Oracle Java 教程 - 回答问题时可能出现错误

    我是 Java 新手 正在阅读 Oracle 教程 每个部分之后都有问题和答案 我不明白一个答案中的一句话 见下面的粗体线 来源是https docs oracle com javase tutorial java javaOO QandE
  • 当路径的点超出视野时,Android Canvas 不会绘制路径

    我在绘制路径时遇到了 Android Canvas 的一些问题 我的情况是 我有一个相对布局工作 如地图视图 不使用 google api 或类似的东西 我必须在该视图上绘制一条路径 canvas drawPath polyPath bor
  • HAProxy SSL终止+客户端证书验证+curl/java客户端

    我希望使用我自己的自签名证书在 HAProxy 上进行 SSL 终止 并使用我创建的客户端证书验证客户端访问 我通过以下方式创建服务器 也是 CA 证书 openssl genrsa out ca key 1024 openssl req
  • 删除优先级队列的尾部元素

    如何删除优先级队列的尾部元素 我正在尝试使用优先级队列实现波束搜索 一旦优先级队列已满 我想删除最后一个元素 优先级最低的元素 Thanks 没有简单的方法 将元素从原始元素复制到新元素 最后一个除外 PriorityQueue remov
  • 在 Struts 2 中传递 URL 参数而不使用查询字符串

    我想使用类似的 URL host ActionName 123 abc 而不是像这样传递查询字符串 host ActionName parm1 123 parm2 abc 我怎样才能在 Struts 2 中做到这一点 我按照下面的方法做了
  • Java:从集合中获取第一项

    如果我有一个集合 例如Collection
  • 如何使用正则表达式验证 1-99 范围?

    我需要验证一些用户输入 以确保输入的数字在 1 99 范围内 含 这些必须是整数 Integer 值 允许前面加 0 但可选 有效值 1 01 10 99 09 无效值 0 007 100 10 5 010 到目前为止 我已经制定了以下正则
  • 从直方图计算平均值和百分位数?

    我编写了一个计时器 可以测量任何多线程应用程序中特定代码的性能 在下面的计时器中 它还会在地图中填充花费了 x 毫秒的调用次数 我将使用这张图作为我的直方图的一部分来进行进一步的分析 例如调用花费了这么多毫秒的百分比等等 public st
  • Java:如何确定文件所在的驱动器类型?

    Java 是否有一种独立于平台的方法来检测文件所在的驱动器类型 基本上我有兴趣区分 硬盘 可移动驱动器 如 USB 记忆棒 和网络共享 JNI JNA 解决方案不会有帮助 可以假设 Java 7 您可以使用 Java 执行 cmd fsut
  • Spring Data JPA:查询如何返回非实体对象或对象列表?

    我在我的项目中使用 Spring Data JPA 我正在演奏数百万张唱片 我有一个要求 我必须获取各种表的数据并构建一个对象 然后将其绘制在 UI 上 现在如何实现我的 Spring 数据存储库 我读到它可以通过命名本机查询来实现 如果指
  • 如何停止执行的 Jar 文件

    这感觉像是一个愚蠢的问题 但我似乎无法弄清楚 当我在 Windows 上运行 jar 文件时 它不会出现在任务管理器进程中 我怎样才能终止它 我已经尝试过 TASKKILL 但它对我也不起作用 On Linux ps ef grep jav
  • Play.application() 的替代方案是什么

    我是 Play 框架的新手 我想读取conf文件夹中的一个文件 所以我用了Play application classloader getResources Data json nextElement getFile 但我知道 play P
  • IntelliJ 组织导入

    IntelliJ 是否具有类似于 Eclipse 中的组织导入功能 我拥有的是一个 Java 文件 其中多个类缺少导入 例子 package com test public class Foo public Map map public J
  • 避免 Java 中的重复导入:继承导入?

    有没有办法 继承 导入 Example 常见枚举 public enum Constant ONE TWO THREE 使用此枚举的基类 public class Base protected void register Constant
  • 如何让 Emma 或 Cobertura 与 Maven 一起报告其他模块中源代码的覆盖率?

    我有一个带有 Java 代码的多模块 Maven 设置 我的单元测试在其中一个模块中测试多个模块中的代码 当然 这些模块具有相互依赖性 并且在测试执行之前根据需要编译所有相关模块中的代码 那么 如何获得整个代码库覆盖率的报告 注意 我不是问
  • 何时在 hibernate 中使用 DiscriminatorValue 注解

    在 hibernate 中使用 DiscriminatorValue 注释的最佳场景是什么以及何时 这两个链接最能帮助我理解继承概念 http docs oracle com javaee 6 tutorial doc bnbqn html
  • HttpClient请求设置属性问题

    我使用这个 HttpClient 库玩了一段时间 几周 我想以某种方式将属性设置为请求 不是参数而是属性 在我的 servlet 中 我想使用 Integer inte Integer request getAttribute obj 我不

随机推荐