Java JOptionPane showmessagedialog出现初学者错误

Java JOptionPane showmessagedialog出现初学者错误,java,double,joptionpane,Java,Double,Joptionpane,我一直在关注YouTube上关于Java使用Eclipse的教程 目前,我正在尝试使用JOptionPane.showMessageDialog将两个double相乘,并将结果输出为double,但它给了我一个错误 这是我的密码: import javax.swing.JOptionPane; public class Variables { public static void main(String arg[]) { double length = 3; doubl

我一直在关注YouTube上关于Java使用Eclipse的教程

目前,我正在尝试使用
JOptionPane.showMessageDialog
将两个double相乘,并将结果输出为double,但它给了我一个错误

这是我的密码:

import javax.swing.JOptionPane;

public class Variables {
  public static void main(String arg[])
  {
    double length = 3;
    double width = 2;
    double area = length*width;
    JOptionPane myIO = new JOptionPane();
    myIO.showMessageDialog(null, area);
  }
}
错误是:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
  The method showMessageDialog(Component, Object) in the type JOptionPane
      is not applicable for the arguments (null, double)
    at Variables.main(Variables.java:11)

我完全掌握了我在教程中看到的东西,所以我不知道我做错了什么。我觉得我没有导入一些库或我应该有的东西,但Eclipse似乎可以识别
JOptionPane
showMessageDialog

将您的main更改为:

 public static void main(String arg[])
      {
        double length = 3;
        double width = 2;
        double area = length*width;
        JOptionPane.showMessageDialog(null, area);
      }

使用
JOptionPane
时,我们不需要任何声明

尝试将
双区域
更改为
双区域

double
是一个原语,因此不会继承
对象
,该对象是
showMessageDialog
所期望的参数类型

Double
Double
的包装类,与所有对象一样,继承自
Object

Java从
Double
转换为
Double
通常没有问题,反之亦然,但它接受
Object
类型的参数这一事实可能意味着您实际上并不想做您所做的事情


我要注意的是,这在NetBeans(Java7)和(Java6)中都是有效的(除了预期的运行时错误),所以可能Eclipse在这里是错误的,或者您使用的是旧版本的Java。谈到Java,您应该始终运行最新版本,除非您有特定的理由不这样做。这只是一个例外。

这段代码有很多问题,我建议您阅读该代码,而不是您所看到的代码

首先,您甚至不应该尝试运行未编译的代码。在Eclipse中打开Problems视图,如果该视图中列出了一个编译错误,甚至不要考虑运行代码

然后阅读编译器错误消息并尝试理解它们以修复它们。 这里的问题是,您可能正在使用一个非常非常旧的JDK版本(Java 5之前),它不会自动将原语(double)装箱到它们的包装类型(double)中。下载最新版本的JDK,并配置eclipse以使用此新版本

但还有其他问题:

  • 您不应该创建新的JOptionPane来调用静态方法showMessageDialog()。只需使用JOptionPane.showMessageDialog()
  • 您不应该在事件分派线程之外使用Swing。鉴于您是一名新手,现在不要使用Swing,只调用yse System.out.println()在屏幕上打印值

将int类型强制转换为区域double,如下所示:

import javax.swing.JOptionPane;

public class Variables {
    public static void main(String arg[])
    { 
        double length = 3;
        double width = 2;
        double area = length*width;
        JOptionPane myIO = new JOptionPane();
        JOptionPane.showMessageDialog(null, (int)area);
    }
}
publicstaticvoidshowmessagedialog(componentparentcomponent,objectmessage)需要一个组件和一个对象。如果要传递一个double,可能需要将对象加倍,而不是将基本体加倍。