我试图让这段代码运行并制作一个带有黑暗图像的图像。但是我继续得到这个运行时错误:
java.lang.NullPointerException
at java.lang.String.<init>(Unknown Source)
at SimplePicture.<init>(SimplePicture.java:96)
at SimplePicture.explore(SimplePicture.java:364)
at Prob04Runner.run(Prob04.java:50)
at Prob04.main(Prob04.java:8)
我的空值是代码所必需的。
我不明白我做错了什么,这是代码,谢谢你:
import java.awt.Color;
public class Prob04{
public static void main(String[] args){
Prob04Runner obj = new Prob04Runner();
obj.run();
}//end main
}//end class Prob04
//======================================================//
class Prob04Runner{
public Prob04Runner(){//constructor
System.out.println("Display your name here.");
}//end constructor
//----------------------------------------------------//
public void run(){
Picture skater = new Picture("Prob04a.bmp");
skater.explore();
skater = crop(skater,6,59,392,293);
Picture hole = new Picture("Prob04b.bmp");
hole.explore();
hole = crop(hole,6,59,392,293);
Picture snowScene = new Picture("Prob04c.jpg");
snowScene.explore();
snowScene = crop(snowScene,6,59,392,293);
//Make all the pixels darker in the snow scene except
// for those in the location of the hole. Make them
// brighter.
darkenBackground(hole,snowScene);
//Apply a red tint to the skater
redTint(skater);
//Draw the skater on the snowScene.
greenScreenDraw(skater,snowScene,0,0);
//Display students name on the final output and
// display it.
snowScene.addMessage("Display your name here.",10,15);
snowScene.explore();
System.out.println(snowScene);
}//end run method
//----------------------------------------------------//
//Assumes the source has a pure green background.
// Applies a red tint to every pixel that is not pure
// green.
private void redTint(Picture pic){
Pixel[] pixels = pic.getPixels();
Color color = null;
int red = 0;
int green = 0;
int blue = 0;
for(int cnt = 0;cnt < pixels.length;cnt++){
color = pixels[cnt].getColor();
//Apply a red tint to all non-green pixels
if(!(color.equals(Color.GREEN))){
//Increase the value of the red component
red = color.getRed();
if(red*1.25 < 255){
red = (int)(red * 1.25);
}else{
red = 255;
}//end else
//Decrease the value of blue and green
green = (int)(color.getGreen()*0.8);
blue = (int)(color.getBlue()*0.8);
//Apply the new color to the pixel.
pixels[cnt].setColor(new Color(red,green,blue));
}//end if
}//end for loop
}//end redTint
//----------------------------------------------------//
//Assumes the pattern image has a pure green background.
// Assumes that the pattern and the destination have the
// same dimensions. Darkens every pixel in the
// destination that is at the location of a green pixel
// in the pattern. Applies a red tint to every pixel
// in the destination that is at the location of a
// non-green pixel in the pattern
private void darkenBackground(
Picture pattern,
Picture dest){
Pixel[] patternPixels = pattern.getPixels();
Pixel[] destPixels = dest.getPixels();
Color color = null;
int red = 0;
int green = 0;
int blue = 0;
for(int cnt = 0;cnt < patternPixels.length;cnt++){
color = patternPixels[cnt].getColor();
if(color.equals(Color.GREEN)){
//Darken corresponding pixel in the destination.
color = destPixels[cnt].getColor();
destPixels[cnt].setColor(color.darker());
}else{
//Apply a red tint to the corresponding pixel in
// the destination.
color = destPixels[cnt].getColor();
red = color.getRed();
if(red*1.25 < 255){
red = (int)(red * 1.25);
}else{
red = 255;
}//end else
green = (int)(color.getGreen() * 0.8);
blue = (int)(color.getBlue() * 0.8);
destPixels[cnt].setColor(new Color(red,green,blue));
}//end else
}//end for loop
}//end darkenBackground
private void greenScreenDraw(
Picture source,
Picture dest,
//Place the upper-left corner
// of the source image at the
// following location in the
// destination image.
int destX,
int destY){
int width = source.getWidth();
int height = source.getHeight();
Pixel pixel = null;
Color color = null;
for(int row = 0;row < height;row++){
for(int col = 0;col < width;col++){
color = source.getPixel(col,row).getColor();
if(!(color.equals(Color.GREEN))){
pixel = dest.getPixel(destX + col,destY + row);
pixel.setColor(color);
}//end if
}//end inner loop
}//end outer loop
}//end greenScreenDraw
//----------------------------------------------------//
//Crops a Picture object to the given width and height
// with the upper-left corner located at startCol and
// startRow.
private Picture crop(Picture pic,int startCol,
int startRow,
int width,
int height){
Picture output = new Picture(width,height);
int colOut = 0;
int rowOut = 0;
int col = 0;
int row = 0;
Pixel pixel = null;
Color color = null;
for(col = startCol;col < startCol+width;col++){
for(row = startRow;row < startRow+height;row++){
color = pic.getPixel(col,row).getColor();
pixel = output.getPixel(colOut,rowOut);
pixel.setColor(color);
rowOut++;
}//end inner loop
rowOut = 0;
colOut++;
}//end outer loop
return output;
}//end crop
}//end class Prob04Runner
答案 0 :(得分:0)
您可能正在使用参数String
调用null
的构造函数,这会导致NullPointerException
通常没有必要调用String
的构造函数。只需将其分配为String x = y
即可。 <{1}}没有必要。
当然,您仍然需要找出String x = new String(y)
为String
的原因。
编辑:如果您的null
需要String
,请不要调用构造函数。
有关详细信息,请添加课程null
的来源。