编译和运行一个java程序的奇怪问题(10分)

  • 主题发起人 主题发起人 青云
  • 开始时间 开始时间

青云

Unregistered / Unconfirmed
GUEST, unregistred user!
源文件frame1.java (该文件的路径是 d:/test/frame1.java )如下:
import java.awt.*;

import java.awt.event.*;
public class frame1 extends Frame
{

frame1()
{
super("Frame1");
// self.title:='Frame with Button"';
setSize(300,250);
setLayout(null);
//pack();
addWindowListener(
new WindowAdapter(){
public void windowClosing(WindowEvent e){
//setVisible(false);
System.exit(0);}});
canvas2a x=new canvas2a();
this.add(x);
this.setVisible(true);
// self.visible:=true;
}



class canvas2a extends Canvas
{
canvas2a()
{
setSize(250,100);
this.setBounds(23,23,240,100);
setBackground(Color.yellow);
}
public void paint(Graphics g)
{
g.setColor(Color.red);
g.drawString("this is my gui program",40,50);

}
}
public static void main(String args[])
{
frame1 frm=new frame1();
}
}
jdk的安装位置: D:/Program Files/JBuilder8/jdk1.4
然后,我建立一个 bat文件,内容是:
D:/Program Files/JBuilder8/jdk1.4/bin/javac d:/test/frame1.java
D:/Program Files/JBuilder8/jdk1.4/bin/javaw -classpath "d:/test" frame1
可是运行不成功,我修改如下:
d:
cd D:/Program Files/JBuilder8/jdk1.4/bin
javac d:/test/frame1.java
javaw -classpath "d:/test" frame1
这样就可以了,请问是什么原因?
 
看来楼主对DOS命令不太熟悉。
bat文件中的每一行必须为有效的DOS指令。DOS按照顺序逐条执行。
修改前的bat文件两行命令都不是有效的DOS命令,当然不会执行
不管你现在在DOS提示符下的什么位置,比如 C:/
C:/>_
C:/>cd D:/Program Files/JBuilder8/jdk1.4/bin +回车
D:/Program Files/JBuilder8/jdk1.4/bin>_
D:/Program Files/JBuilder8/jdk1.4/bin>javac d:/test/frame1.java +回车
...........
这样显然可以运行,但是如果按照你第一次的
c:/>_
c:/>D:/Program Files/JBuilder8/jdk1.4/bin/javac d:/test/frame1.java +回车
肯定会提示“系统找不到指定的路径”。因为D:/Program Files/JBuilder8/jdk1.4/bin/javac d:/test/frame1.java 根本不是有效的DOS命令啊!
明白了么?
 
原因我找到了,是因为dos不能识别长文件名的问题。
解决方法,我发到了我的论坛上:
http://www.yzsoftware.com/bbs/show.asp?id=259&bd=11&totable=1
==================================================
在dos下编译运行java程序要注意短文件名问题
今天调试一个java程序的时候,老是不通过:

源文件frame1.java (该文件的路径是 d:/test/frame1.java )如下:
import java.awt.*;

import java.awt.event.*;
public class frame1 extends Frame
{
frame1()
{
super("Frame1");
// self.title:='Frame with Button"';
setSize(300,250);
setLayout(null);
//pack();
addWindowListener(
new WindowAdapter(){
public void windowClosing(WindowEvent e){
//setVisible(false);
System.exit(0);}});
canvas2a x=new canvas2a();
this.add(x);
this.setVisible(true);
// self.visible:=true;
}



class canvas2a extends Canvas
{
canvas2a()
{
setSize(250,100);
this.setBounds(23,23,240,100);
setBackground(Color.yellow);
}
public void paint(Graphics g)
{
g.setColor(Color.red);
g.drawString("this is my gui program",40,50);

}
}
public static void main(String args[])
{
frame1 frm=new frame1();
}
}
jdk的安装位置: D:/Program Files/JBuilder8/jdk1.4
然后,我建立一个 bat文件,内容是:
D:/Program Files/JBuilder8/jdk1.4/bin/javac d:/test/frame1.java
D:/Program Files/JBuilder8/jdk1.4/bin/javaw -classpath "d:/test" frame1
可是运行不成功,我修改如下:
d:
cd D:/Program Files/JBuilder8/jdk1.4/bin
javac d:/test/frame1.java
javaw -classpath "d:/test" frame1
这样就可以了,请问是什么原因?
==============================================
后来,我突然想起可能是dos不能识别常文件名的问题,于是利用delphi作了一个转换长短文件名的工具,主要代码如下:
标题: 如何取得文件的长文件名和短文件名称
如果你要利用DOS命令,需要将文件的长文件名转换为短文件名称
//ShellApi
function GetShortFileName(const FileName : string) : string;
var
aTmp: array[0..255] of char;
begin
if GetShortPathName(Pchar(FileName),aTmp,Sizeof(aTmp)-1)=0 then
Result:= FileName
else
Result:=StrPas(aTmp);
end;

function GetLongFileName(const FileName : string) : string;
var
aInfo: TSHFileInfo;
begin
if SHGetFileInfo(Pchar(FileName),0,aInfo,Sizeof(aInfo),SHGFI_DISPLAYNAME)<>0 then
Result:= string(aInfo.szDisplayName)
else
Result:= FileName;
end;

于是把D:/Program Files/JBuilder8/jdk1.4/bin 换成D:/PROGRA~1/JBUILD~1/jdk1.4/bin 就ok 啦,大家一定要注意,不要再犯我这样的错误!
 
后退
顶部