Java中使用不同参数调用方法
我正在编写一个处理对象识别的简单程序。导致这个问题的原因是我正在考虑并制作一个gui,但这里的问题是它不允许我调用一个方法。我在网站上到处找了找,但没有找到运气。尝试了其他人的不同建议,但仍然一无所获。我只是不知道应该如何使用不同的参数调用方法 这是我试过的Java中使用不同参数调用方法,java,Java,我正在编写一个处理对象识别的简单程序。导致这个问题的原因是我正在考虑并制作一个gui,但这里的问题是它不允许我调用一个方法。我在网站上到处找了找,但没有找到运气。尝试了其他人的不同建议,但仍然一无所获。我只是不知道应该如何使用不同的参数调用方法 这是我试过的 public class Main { private static ImageProcessor ip; public static void main(String[] args) { Main_ m
public class Main {
private static ImageProcessor ip;
public static void main(String[] args) {
Main_ m = new Main_();
m.main(ip);
}
}
下面是我试图调用的所需方法
public class Main_ implements PlugInFilter{
......
public static String launch(ImageProcessor ip){
ip = FiltreGaussien_.apply(ip, 3);
ImageProcessor result = Otsu_.apply(ip);
Canny_ cannyFilter = new Canny_(result);
result = cannyFilter.apply(5);
Hough_ houghFilter = new Hough_(result);
List<Line> lines = houghFilter.apply();
try{
Card card = new Card(lines);
ip = card.extractCorner(ip);
ImagePlus imp = new ImagePlus("...", ip);
new ImageWindow(imp);
}
catch(RuntimeException e){
}
ip = Otsu_.apply(ip);
TemplateMatching_ matcher = new TemplateMatching_();
return matcher.launch(ip);
}
}
public-class-Main_uuuu实现插件填充器{
......
公共静态字符串启动(ImageProcessor ip){
ip=FilterGaussien_u2;u应用(ip,3);
图像处理器结果=大津应用(ip);
Canny_uu罐头过滤器=新的Canny_u过滤器(结果);
结果=罐头过滤器。应用(5);
Hough_uh过滤器=新的Hough_h(结果);
列表行=houghFilter.apply();
试一试{
卡=新卡(行);
ip=卡角(ip);
ImagePlus imp=新ImagePlus(“…”,ip);
新图像窗口(imp);
}
捕获(运行时异常e){
}
ip=大津应用(ip);
TemplateMatching\uMatcher=新模板匹配;
返回匹配器启动(ip);
}
}
我的控制台给了我这个
Exception in thread "main" java.lang.NullPointerException
at ij.process.ByteProcessor.<init>(ByteProcessor.java:96)
at main.mean.FiltreGaussien_.apply(FiltreGaussien_.java:69)
at main.card_detection.Main_.launch(Main_.java:30)
at main.card_detection.Main_.main(Main_.java:22)
at main.Main.main(Main.java:11)
Process finished with exit code 1
线程“main”java.lang.NullPointerException中的异常
位于ij.process.ByteProcessor。(ByteProcessor.java:96)
at main.mean.FilterGaussien_u2;u.apply(FilterGaussien_2;u.java:69)
在main.card\u detection.main\u.launch(main\u.java:30)
在main.card\u detection.main\u.main(main\u.java:22)
main.main.main(main.java:11)
进程已完成,退出代码为1
我做错了什么?这是我们被问到的最常见的问题之一,也是我们最没有能力回答的问题,但你最有能力回答自己 让我解释一下错误的含义:您试图使用变量、属性或方法返回值,但它包含null-这意味着变量中没有类的实例。 它有点像口袋:你的衬衫上有一个口袋,用来装钢笔。如果你把手伸进口袋,发现里面没有钢笔,你就不能在一张纸上签上你的名字——如果你尝试的话,你会得到非常有趣的表情!空口袋会给你一个空值(这里没有笔!),所以你不能做任何你在取回笔后通常会做的事情。为什么是空的?这就是问题所在——可能是你今早出门时忘了拿笔,也可能是你昨晚脱下笔时把笔忘在昨天衬衫的口袋里了 我们不知道,因为我们不在那里,更重要的是,我们甚至看不到你的衬衫,更不用说口袋里有什么了 回到计算机上,不知何故,您也做了同样的事情——我们看不到您的代码,更不用说运行它并找出哪些内容在不应该的时候包含null了。 但是你可以,你的IDE会在这里帮助你。在调试器中运行程序,当它失败时,IDE将显示它发现问题所在的行。然后,您可以开始查看它的各个部分,查看哪个值为null,并开始通过代码查找原因。因此,在包含错误行的方法的开头放置一个断点,然后从一开始就再次运行程序。这一次,它将在错误发生之前停止,并让您通过查看您的值来检查代码中发生了什么
但是我们不能这样做-我们没有你的代码,我们不知道如何使用它如果我们有它,我们没有你的数据。所以试试看,看看你能找到多少信息 您的问题是FilterGaussien_u2;.apply错误地初始化了ByteProcessor-这是堆栈跟踪告诉您的。因为我们既没有FilterGaussian的代码也没有文档,所以我们不能说它有什么问题/某些变量没有初始化。如堆栈跟踪所示,检查FilterGaussian第69行中的代码。可能与您如何吞咽(
捕获
并忽略)启动中的异常有关。使用IDE中的调试器逐步检查代码,以查看哪个变量是null
。或者你的问题,把你的代码删减到a。这能回答你的问题吗@查理·阿姆斯特朗。对我来说,是在我得到anar1501的答案后。谢谢你的时间和你的解释,现在我明白了这个问题。是时候用调试器查看它了:-)