gpt4 book ai didi

java - JButton setIcon nullPointerException

转载 作者:行者123 更新时间:2023-12-01 17:19:09 24 4
gpt4 key购买 nike

我的代码:

private JButton stopBotting = new JButton();
ImageIcon img = new ImageIcon(getClass().getResource(System.getProperty("user.dir") + "VisualBot/resources/play.png"));
stopBotting.setIcon(img);

add(stopBotting);

完整代码:

package bot;

import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;

public class GuiBotting extends JFrame{

private int controlWidth = 300;
private int controlHeight = 78;
private JButton startBotting = new JButton();
private JButton stopBotting = new JButton();
private JButton pauseBotting = new JButton();

private GuiBotting(){

setVisible(true);
setResizable(false);
setSize(controlWidth, controlHeight);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
setLayout(null);

ImageIcon img = new ImageIcon(getClass().getResource(System.getProperty("user.dir") + "VisualBot/resources/play.png"));
stopBotting.setIcon(img);

eventStartBotting startBottingEvent = new eventStartBotting();
eventStopBotting stopBottingEvent = new eventStopBotting();
eventPauseBotting pauseBottingEvent = new eventPauseBotting();

startBotting.addActionListener(startBottingEvent);
stopBotting.addActionListener(stopBottingEvent);
pauseBotting.addActionListener(pauseBottingEvent);

startBotting.setBounds(0, 0, 100, 50);
stopBotting.setBounds(0, 0, 50, 50);
pauseBotting.setBounds(50, 0, 50, 50);

add(stopBotting);
add(pauseBotting);

stopBotting.setVisible(false);
pauseBotting.setVisible(false);

addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(WindowEvent winEvt) {
setVisible(false);
dispose();

VisualBot.stopBotting();

GuiPreparation.openGui();
}
});

}

public class eventStartBotting implements ActionListener{
public void actionPerformed(ActionEvent startBottingActionEvenr){
System.out.println("Starting with botting...");
VisualBot.startBotting();
pauseBotting.setVisible(true);
stopBotting.setVisible(true);
}
}

public class eventStopBotting implements ActionListener{
public void actionPerformed(ActionEvent stopBottingActionEvent) {

System.out.println("Stopping with botting...");
VisualBot.stopBotting();

dispose();

GuiPreparation.openGui();

}

}

public class eventPauseBotting implements ActionListener{
public void actionPerformed(ActionEvent pauseBottingActionEvent){
System.out.println("Pausing botting...");
VisualBot.pauseBotting();
stopBotting.setBounds(0, 0, 100, 50);
stopBotting.setVisible(false);
pauseBotting.setVisible(false);
}
}

public static void openGui(){
GuiBotting guiBotting = new GuiBotting();

}

}

当我打开 gui 时,出现此错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
at darkorbit.GuiBotting.<init>(GuiBotting.java:31)
at darkorbit.GuiBotting.openGui(GuiBotting.java:98)
at darkorbit.GuiPreparation$eventStartBotting.actionPerformed(GuiPreparation.java:255)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
etc...

我只是不明白,即使我设置了图像的完整路径,我也会得到 nullPointerException。我为此找到了很多答案并尝试了所有答案,但我还没有让它发挥作用。如果重要的话我会使用 Eclipse

也失败了:

package bot;

import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;

public class GuiBotting extends JFrame{

private int controlWidth = 300;
private int controlHeight = 78;
private JButton startBotting = new JButton();
private JButton stopBotting = new JButton();
private JButton pauseBotting = new JButton();

private GuiBotting(){

setVisible(true);
setResizable(false);
setSize(controlWidth, controlHeight);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
setLayout(null);

ImageIcon img = new ImageIcon(getClass().getResource(System.getProperty("user.dir") + "/VisualBot/resources/play.png"));
stopBotting.setIcon(img);

eventStartBotting startBottingEvent = new eventStartBotting();
eventStopBotting stopBottingEvent = new eventStopBotting();
eventPauseBotting pauseBottingEvent = new eventPauseBotting();

startBotting.addActionListener(startBottingEvent);
stopBotting.addActionListener(stopBottingEvent);
pauseBotting.addActionListener(pauseBottingEvent);

startBotting.setBounds(0, 0, 100, 50);
stopBotting.setBounds(0, 0, 50, 50);
pauseBotting.setBounds(50, 0, 50, 50);

add(stopBotting);
add(pauseBotting);

stopBotting.setVisible(false);
pauseBotting.setVisible(false);

addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(WindowEvent winEvt) {
setVisible(false);
dispose();

VisualBot.stopBotting();

GuiPreparation.openGui();
}
});

}

public class eventStartBotting implements ActionListener{
public void actionPerformed(ActionEvent startBottingActionEvenr){
System.out.println("Starting with botting...");
VisualBot.startBotting();
pauseBotting.setVisible(true);
stopBotting.setVisible(true);
}
}

public class eventStopBotting implements ActionListener{
public void actionPerformed(ActionEvent stopBottingActionEvent) {

System.out.println("Stopping with botting...");
VisualBot.stopBotting();

dispose();

GuiPreparation.openGui();

}

}

public class eventPauseBotting implements ActionListener{
public void actionPerformed(ActionEvent pauseBottingActionEvent){
System.out.println("Pausing botting...");
VisualBot.pauseBotting();
stopBotting.setBounds(0, 0, 100, 50);
stopBotting.setVisible(false);
pauseBotting.setVisible(false);
}
}

public static void openGui(){
GuiBotting guiBotting = new GuiBotting();

}

}

最佳答案

ImageIcon img = new ImageIcon(getClass().getResource(
System.getProperty("user.dir") + "VisualBot/resources/play.png"));

user.dir 在这里没有用。

  1. 它是一个实际的文件路径,而 getResource(..) 使用的 String 应该是代表一个 String相对于类路径的路径。
  2. 它没有以 / 为后缀,因此需要显式添加它才能形成有效路径。

尝试使用:

ImageIcon img = new ImageIcon(getClass().getResource(
"/VisualBot/resources/play.png"));

关于java - JButton setIcon nullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20022434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com