Java 导入图像会导致paintComponent无法启动
我在我的项目中有两个类,客户和卡片。当我尝试将图像导入Card类时,客户端中的paintComponent方法不会启动。计时器仍会启动,并且在计时器侦听器中重新绘制后输出仍会打印。此问题的原因似乎是卡的构造函数中的try-catchJava 导入图像会导致paintComponent无法启动,java,image,swing,embedded-resource,paintcomponent,Java,Image,Swing,Embedded Resource,Paintcomponent,我在我的项目中有两个类,客户和卡片。当我尝试将图像导入Card类时,客户端中的paintComponent方法不会启动。计时器仍会启动,并且在计时器侦听器中重新绘制后输出仍会打印。此问题的原因似乎是卡的构造函数中的try-catch package card; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Point; import java.awt.image.BufferedImage; import
package card;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Card {
BufferedImage cardImage;
Point loc = new Point(50, 50);
int scale = 1;
public Card(){
try {
cardImage = ImageIO.read(new File("Penguins.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}
public void draw(Graphics2D g2){
g2.setColor(Color.GRAY);
if(cardImage == null)
g2.fillRect(loc.x, loc.y, 150, 225);
else
g2.drawImage(cardImage, loc.x, loc.y, 50, 150, null);
}
}
新类
package core;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import card.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Client extends JPanel {
ArrayList<Card>[] board;
Card card;
Timer timer;
static Client player;
public static void main(String[] args) {
JFrame window = new JFrame("Game");
window.setSize(1080, 720);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setResizable(false);
window.setVisible(true);
window.setLocation(50, 50);
window.setBackground(Color.GREEN);
player = new Client();
window.setContentPane(player);
}
public Client() {
//board = new ArrayList<Card>[4];
card = new Card();
ActionListener game = new TimerListener();
timer = new Timer(100, game);
timer.start();
}
public class TimerListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
repaint();
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.BLACK);
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setStroke(new BasicStroke(5));
g2.drawOval(15, 75, 200, 200);
g2.drawOval(15, 350, 200, 200);
g2.drawRoundRect(355, -10, 450, 60, 15, 15);
g2.drawRoundRect(230, 75, 700, 90, 20, 20);
g2.drawRoundRect(230, 190, 700, 90, 20, 20);
g2.drawRoundRect(230, 350, 700, 90, 20, 20);
g2.drawRoundRect(230, 475, 700, 90, 20, 20);
g2.drawRoundRect(355, 590, 450, 90, 15, 15);
g2.drawRoundRect(950, 75, 90, 90, 10, 10);
g2.drawRoundRect(950, 190, 90, 90, 10, 10);
g2.drawRoundRect(950, 350, 90, 90, 10, 10);
g2.drawRoundRect(950, 475, 90, 90, 10, 10);
card.draw(g2);
}
}
包核;
导入java.awt.BasicStroke;
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.RenderingHints;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.ArrayList;
进口证*;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.Timer;
公共类客户端扩展了JPanel{
ArrayList[]董事会;
卡片;
定时器;
静态客户端播放器;
公共静态void main(字符串[]args){
JFrame窗口=新JFrame(“游戏”);
设置窗口大小(1080720);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setresizeable(false);
window.setVisible(true);
窗口设置位置(50,50);
窗。背景(颜色。绿色);
player=新客户端();
setContentPane(播放器);
}
公共客户机(){
//board=新阵列列表[4];
卡=新卡();
ActionListener游戏=新TimerListener();
定时器=新定时器(100,游戏);
timer.start();
}
公共类TimerListener实现ActionListener{
已执行的公共无效操作(操作事件e){
重新油漆();
}
}
公共组件(图形g){
超级组件(g);
图形2d g2=(图形2d)g;
g2.设置颜色(颜色为黑色);
g2.setRenderingHint(RenderingHints.KEY_抗锯齿,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.设定行程(新基本行程(5));
g2.drawOval(15,75,200,200);
g2.drawOval(15350200200);
g2.drawRoundRect(355,-10450,60,15,15);
g2.drawRoundRect(230,75,700,90,20,20);
g2.drawRoundRect(230、190、700、90、20、20);
g2.drawRoundRect(230、350、700、90、20、20);
g2.drawRoundRect(230、475、700、90、20、20);
g2.drawRoundRect(355590450,90,15,15);
g2.drawRoundRect(950,75,90,90,10,10);
g2.drawRoundRect(950、190、90、90、10、10);
g2.drawRoundRect(950、350、90、90、10、10);
g2.drawRoundRect(950475,90,90,10,10);
抽牌(g2);
}
}
图像存储在哪里?是否引发任何异常?如果您不想在上运行Swing
应用程序,请从链接了解初始线程。这篇文章增加了一点关于如何做的内容。我希望这将是有帮助的:-)+1的程序员。请确认图像存储的位置。仅供参考-使用我自己的图像,您的代码通过程序员的测试工作(基于您正在使用的路径,这只是文件名),然后我可以说您的图像文件需要位于工作目录的根目录中(如果从IDE运行),这是项目的根目录。读取文件时,搜索将从工作目录开始。另请参见nIcEcOw的链接,以将图像添加到项目中。您可能希望将图像嵌入到程序中,在这种情况下,从文件读取是不够的,应该从url读取