当实例化一个新的URL时,来自DrawImage类的下面的第一个代码块起作用。
但是,当我从另一个类RandomImage输入相同的String(“ https://www.purchased.com/hubfs/template/favicon.png”)时,出现以下错误:
我首先尝试手动输入String。
import java.awt.Image;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class DrawImage {
public static void main(String[] args) throws Exception {
String link = "https://www.purchased.com/hubfs/template/favicon.png";
System.setProperty("http.agent", "Chrome");
URL url = new URL(link);
Image image = ImageIO.read(url.openStream());
}
}
->按预期工作
然后,我更改为提供一个RandomImage(这是产生错误消息的代码!)
import java.awt.Image;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class DrawImage {
public static void main(String[] args) throws Exception {
RandomImage img = new RandomImage();
String link = img.link;
System.setProperty("http.agent", "Chrome");
URL url = new URL(link);
Image image = ImageIO.read(url.openStream());
}
}
以下类提供随机图像:
import java.net.*;
import java.io.*
public class RandomImage {
public static String link;
public RandomImage() throws Exception {
this.link = generateUsableImageLink();
}
但是在运行第二种方法时,出现以下错误:
java.net.MalformedURLException: no protocol: "https://www.purchased.com/hubfs/template/favicon.png"
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at DrawImage.main(DrawImage.java:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:267).
我尝试(如您在上面的代码中看到的)使RandomImage成为对象,但是错误提要告诉我,当我使用RandomImage的输入创建URL实例时发生错误。
如果我猜的话,这个问题是由导入的软件包之间的某些交互作用或RandomImage中引发的错误引起的。逐个字符,我手动输入的字符串和RandomImage生成的字符串是相同的。我将如何解决这个问题?
最佳答案
方法generateUsableImageLink
生成带引号的字符串。
更改此方法,以便它不会在字符串上加上引号。