+ -
当前位置:首页 → 问答吧 → 使用不同jdk执行 在compile时指定source可以compile成功 但在执行时出现NoSuchMethodError错误

使用不同jdk执行 在compile时指定source可以compile成功 但在执行时出现NoSuchMethodError错误

时间:2011-11-24

来源:互联网

环境:

我安装了
jdk1.4.2_19

jdk1.6.0_29
我的OS是Win 7
///////////////////////

Main.java 原始码如下
public class Main {
  public static void main(String[] args){
  JFrame jf=new JFrame();
  jf.getContentPane().setPreferredSize(new Dimension(1024, 768));
}
}
////////////////////

执行过程

我先将系统执行路设成

C:\Program Files (x86)\Java\jdk1.6.0_29\bin

以下列方式compile

javac -source 1.4 -target 1.4 Main.java
然后将系统执行路径换成

C:\Program Files (x86)\Java\jdk1.4.2_19\bin
然后以下列方式执行

java Main
结果出现下列例外错误讯息

Exception in thread "main" java.lang.NoSuchMethodError: java.awt.Container.setPr
eferredSize(Ljava/awt/Dimension; )V
at Main.main(Main.java:12)

请问一下
照理讲如果1.4不支援setPreferredSize(Ljava/awt/Dimension; )方法,
则当我再使用1.6 compile时 指定source level是1.4时 他就应该不给我compile成功,为舍么
javac -source 1.4 -target 1.4 Main.java

我还可以成功compile呢,而最后导致我用1.4的jdk去执行发生错误...

请问有哪位大大知道原因吗,还是我的观念有错误...

谢谢回覆

作者: w_pomeranian   发布时间: 2011-11-24

w_pomeranian wrote:
环境:

我安装了
jdk1.4.2_19

jdk1.6.0_29
我的OS是Win 7
///////////////////////

Main.java 原始码如下
public class Main {
  public static void main(String[] args){
  JFrame jf=new JFrame();
  jf.getContentPane().setPreferredSize(new Dimension(1024, 768));
}
}
////////////////////

执行过程

我先将系统执行路设成

C:\Program Files (x86)\Java\jdk1.6.0_29\bin

以下列方式compile

javac -source 1.4 -target 1.4 Main.java
然后将系统执行路径换成

C:\Program Files (x86)\Java\jdk1.4.2_19\bin
然后以下列方式执行

java Main
结果出现下列例外错误讯息

Exception in thread "main" java.lang.NoSuchMethodError: java.awt.Container.setPr
eferredSize(Ljava/awt/Dimension; )V
at Main.main(Main.java:12)

请问一下
照理讲如果1.4不支援setPreferredSize(Ljava/awt/Dimension; )方法,
则当我再使用1.6 compile时 指定source level是1.4时 他就应该不给我compile成功,为舍么
javac -source 1.4 -target 1.4 Main.java

我还可以成功compile呢,而最后导致我用1.4的jdk去执行发生错误...

请问有哪位大大知道原因吗,还是我的观念有错误...

谢谢回覆


使用 -source 1.4 switch 时,编译会限定只能使用 Java 1.4 (含)以前的语法,这跟你可以使用到哪些语法层面的 feature 有关,与能不能参考 core classes 里的哪些 class

作者: Duncan   发布时间: 2011-11-28