Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 导入图像会导致paintComponent无法启动_Java_Image_Swing_Embedded Resource_Paintcomponent - Fatal编程技术网

Java 导入图像会导致paintComponent无法启动

Java 导入图像会导致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

我在我的项目中有两个类,客户和卡片。当我尝试将图像导入Card类时,客户端中的paintComponent方法不会启动。计时器仍会启动,并且在计时器侦听器中重新绘制后输出仍会打印。此问题的原因似乎是卡的构造函数中的try-catch

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读取