使用Java语言编写应用程序的优点在于“一次编译,处处运行”,然而这并不是说所有的Java程序都具有跨平台的特性,事实上,相当一部分的Java程序是不能在别的 *** 作系统上正确运行的,那么如何才能编写一个真正的跨平台的Java程序呢下面是在编写跨平台的Java程序是需要注意的一些事情:
1编写Java跨平台应用程序时,你可以选择JDK10,11,12或支持它们的GUI开发工具如:Jbuilder,VisualAgeforJava等等,但是必须注意你的Java程序只能使用Java核心API包,如果要使用第三方的类库包,则该类库包也要由Java核心包开发完成,否则在发布你的程序的时候还得将支持该Java类库包的JVM发布出去。也就是说,你的程序需要是100%纯Java的。举一个例子,VisualJ++就不是纯Java的,由VisualJ++编写的程序也就不具有平台无关性。
2无论你使用的是JDK或其他开发工具,在编译时都要打开所有的警告选项,这样编译器可以尽可能多的发现平台相关的语句,并给出警告。虽然不能保证没有编译时警告错误的程序一定是跨平台的,但含有警告错误的程序却很有可能是非平台无关的。
3在程序中使用任何一个方法的时候,要详细察看文档,确保你使用的方法不是在文档中已经申明为过时的方法(Deprecatedmethod),也不是文档中未标明的隐含方法(Undocumentedmethod)。
4退出Java程序时尽量不要使用javalangSystem的exit方法。Exit方法可以终止JVM,从而终止程序,但如果同时运行了另一个Java程序,使用exit方法就会让该程序也关闭,这显然不是我们希望看到的情况。事实上要退出Java程序,可以使用destory()退出一个独立运行的过程。对于多线程程序,必须要关闭各个非守护线程。只有在程序非正常退出时,才使用exit方法退出程序。
5避免使用本地方法和本地代码,尽可能自己编写具有相应功能的Java类,改写该方法。如果一定要使用该本地方法,可以编写一个服务器程序调用该方法,然后将现在要编写的程序作为该服务器程序的客户程序,或者考虑CORBA(公共对象请求代理)程序结构。
6Java中有一个类似于Delphi中的winexec的方法,javalangruntime类的exec方法,作为该方法本身是具有平台无关性的,但是给方法所调用的命令及命令参数却是与平台相关的,因此,在编写程序时要避免使用,如果一定要调用其他的程序的话,必须要让用户自己来设置该命令及其参数。比如说,在windows中可以调用notepadexe程序,在linux中就要调用vi程序了。
7程序设计中的所有的信息都要使用ASCII码字符集,因为并不是所有的 *** 作系统都支持Unicode字符集,这对于跨平台的Java中文软件程序不能不说是一大噩耗。
8在程序中不要硬性编码与平台相关的任何常量,比如行分隔符,文件分隔符,路径分隔符等等,这些常量在不同的平台上是不同的,比如文件分隔符,在UNIX和MAC中是“/”,在windows中是“\”,考试,大提示如果要使用这些常量,需要使用jdavautilProperties类的getProperty方法,如javautilPropertiesgetProperty(“fileseparator”)可以获得文件分隔符,getProperty(“lineseparator”)返回行分隔符,getProperty(“pathseparator”)返回路径分隔符。
9在编写跨平台的网络程序时,不要使用javanetInetAddress类的getHostName方法得到主机名,因为不同的平台的主机名格式是不同的,使用getAddress得到格式相同的IP地址,另外,程序中所有的主机名都要换成IP地址,比如>
@SuppressWarnings("serial")
public class Time extends javaxswingJFrame implements ActionListener {
private JButton tube; //定义灯
private JButton jButton1; //定义按钮
private JTextField jTextField1;//定义文本
private JButton jButton2; //定义按钮
private static int log = 0;
private static int buttonLog = 0;
private static Timer time = null; //定义定时器
AnchorLayout thisLayout = new AnchorLayout();
public static void main(String[] args) {
SwingUtilitiesinvokeLater(new Runnable() {
public void run() {
Time inst = new Time();
instsetLocationRelativeTo(null);
instsetVisible(true);
}
});
}
public Time() {
super();
initGUI();
}
private void initGUI() {
try {
getContentPane()setLayout(thisLayout);
setDefaultCloseOperation(WindowConstantsDISPOSE_ON_CLOSE);
tube = new JButton();
tubesetText("灯"); //显示的内容
tubesetBounds(40, 20, 50, 30); //按钮位置和大小
tubesetLocale(new javautilLocale("zh", "CN"));
tubesetBackground(ColorGREEN); //按钮背景颜色
tubesetEnabled(false); //按钮不可编辑
thisadd(tube);
jButton1 = new JButton();
jButton1setText("按钮A"); //显示的内容
jButton1setBounds(30, 60, 70, 30); //按钮位置和大小
jButton1setLocale(new javautilLocale("zh", "CN"));
jButton1addActionListener(this);
thisadd(jButton1);
jTextField1 = new JTextField();
jTextField1setText(""); //显示的内容
jTextField1setLocale(new javautilLocale("zh", "CN"));
jTextField1setBounds(40, 100, 50, 30); //文本位置和大小
thisadd(jTextField1);
jButton2 = new JButton();
jButton2setText("按钮B"); //显示的内容
jButton2setLocale(new javautilLocale("zh", "CN"));
jButton2setBounds(30, 140, 70, 30); //按钮位置和大小
jButton2addActionListener(this);
thisadd(jButton2);
pack();
setSize(500, 400); //画面大小
} catch (Exception e) {
eprintStackTrace();
}
}
@Override
public void actionPerformed(ActionEvent e) {
ActionListener drawClock = new ActionListener () {
public void actionPerformed (ActionEvent evt) {
log = log + 1;
jTextField1setText(StringvalueOf(log));
repaint();
}
};
if (egetSource() == jButton1 && tubegetBackground()equals(ColorGREEN)) {
tubesetBackground(ColorMAGENTA);
} else if(egetSource() == jButton1) {
tubesetBackground(ColorGREEN);
}
if (egetSource() == jButton2 && buttonLog%2 == 0) {
time = new Timer(1000,drawClock);
timestart();
buttonLog = buttonLog + 1;
} else if (egetSource() == jButton2) {
timestop();
Systemoutprintln(buttonLog);
buttonLog = buttonLog + 1;
}
}
}
Java对于服务器 个人电脑和移动设备来说是一项伟大的技术 由于需要java的跨平台的特性 因此java在服务器和移动设备方面的应用是非常成功的 但java在个人电脑应用方面的情况和在服务器及移动设备方面的应用有所不同 但是这很快就会有所改变 至少比你想象得要快 在这篇文章中 我会分析一下java在桌面环境中的应用将怎样得到提升 然后具体说一下java GUI(用户图形接口)的三个主要的工具:AWT Swing 和SWT 在下文中 我将会开发一个完整的java桌面应用程序 Java与桌面端 现在 流行的桌面平台要数Windows Mac and Linux了 但它们不是十全十美的 Windows主宰著桌面 *** 作系统的市场 其上有巨大的应用和开发群体 但它昂贵且有许多安全漏洞 Linux有着稳固的基础 它是开源的软件 比Windows更可靠 Macs非常容易 *** 作且不是黑客的目标 但与Windows和Linux比起来 Mac的硬件和软件可选的余地非常的有限 公司和个人选择他们的 *** 作系统基于许多因素 花费少且安全性高是首选的因素 这导致一些组织从Windows 系统转而选择Linux 对许多用户来说 可用性及对原有应用程序的支持是非常重要的因素 这意味着Windows 将继续享有巨大的市场 Mac有其自己忠诚的用户 这使得苹果机仍然可以存活 Linux 在桌面的流行及Mac的成功创造了多样性 这种多样性正是Java需要的 这种多样性使得Java在桌面有举足轻重的地位 跨平台的支持 Java 运行于所有相关的 *** 作系统 包括Windows Mac和Linux 对于任何组织 他想把现有的应用从一个 *** 作系统移植到另一个 *** 作系统而不用做太多的改动 那么Java正是他们首选的桌面开发平台 或许用微软的可视化工具很容易构建 NET应用 但是这将使你被绑定在了Windows平台上了 很多人也许想立刻用Linux 代替Windows 从而避免由微软件 *** 作系统的漏洞带来的问题 用户不能容忍的问题之一是当从Windows移植到Linux带来的巨大的费用 如果你的应用程序用Java构建 你就没有了这些问题 Java的图形用户界面看上去会跟你用的 *** 作系统一样 而并不需要做什么改动 假如有一天又有一种桌面 *** 作系统出现的话 java 是个安全的赌注 因为它现在能够运行在Windows和Linux 上 那么可以推测它也可以运行在将来可能出现的 *** 作系统上 这些 *** 作系统可能或迟或早地由微软 或是开源社区 或是其它的人开发出来 丰富的特征 最初 Java只有非常有限的一些特征去构建图形用户界面 思想就是用平台无关的Java应用程序接口打包不同的 *** 作系统的本地图形用户界面 称之为抽象的窗口工具 仅有普通的部件如文件域 文本区 选择框 单选按钮 列表框和按钮被AWT支持 图形和图像的特性支持非常有限 也就是说 只足够构建简单的applet程序 认识到需要更高级的图形用户界面组件和图形能力 Sun公司开发了Swing Java D Java D 图像的输入/输出 Java高级图像(JAI)和很多其它的 这些中的一些窗体组件现在已经是Java 标准版(J SE)里的一部分 并且其它的一些扩展必须和你的应用程序打包在一起 例如Swing Java D 图像的输入/输出都是Java的核心API 随着Java开发工具包(JDK)和Java运行环境一起提供 让我们不要忘了J EE平台 如果你开发服务器端的应用程序并且需要丰富的图形用户界面 那么你毫无疑问应该选择Java 这允许你把服务器端的一些代码移到客户端 反之亦然 例如 一个项目可能开始是基于WEB和图形界面 在某些时候 用户可能要求图形元素不能在HTML中实现 如果你选择java做客户端应用 那么你可以重用这些当初用来做服务器端的代码 如果你用远程调用 一些类会真正地实现服务器和客户端的共享 通过页面服务器 Java桌面应用也能够和其它的Java 或非Java应用程序通信 如CORBA TCP/IP 或是 >
import javaawtColor;
import javaawtGraphics;
import javaawteventMouseAdapter;
import javaawteventMouseEvent;
import javaxswingJButton;
import javaxswingJFrame;
import javaxswingJPanel;
public class DrawTest extends JFrame {
JPanel buttonPanel=new JPanel();
JButton round=new JButton("圆");
JButton rectangle=new JButton("长方形");
int roundX=130,roundY=150,roundW=50,roundH=50;
int rectangleX=400,rectangleY=150,rectangleW=50,rectangleH=50;
public void init(){
setTitle("圆和长方形");
setLayout(null);
setSize(600,400);
setResizable(false);
setLocationRelativeTo(null);
buttonPanelsetLayout(null);
buttonPanelsetBounds(0, 300, 600, 100);
roundsetBounds(170, 20, 60, 30);
rectanglesetBounds(350, 20, 80, 30);
buttonPaneladd(round);
buttonPaneladd(rectangle);
add(buttonPanel);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void paint(final Graphics g){
superpaint(g);
gsetColor(Colorblack);
gfillOval(roundX,roundY,roundW,roundH);
gfillRect(rectangleX,rectangleY,rectangleW,rectangleH);
roundaddMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (egetButton() == MouseEventBUTTON1) {
roundX-=1;
roundY-=1;
roundW+=2;
roundH+=2;
gfillOval(roundX,roundY,roundW,roundH);
repaint();
}
}
});
rectangleaddMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (egetButton() == MouseEventBUTTON1) {
rectangleX-=1;
rectangleY-=1;
rectangleW+=2;
rectangleH+=2;
gfillRect(rectangleX,rectangleY,rectangleW,rectangleH);
repaint();
}
}
});
}
public static void main(String[] args) {
new DrawTest()init();
}
}
以上就是关于JAVA基础:Java程序跨平台需要注意什么全部的内容,包括:JAVA基础:Java程序跨平台需要注意什么、JAVA GUI、简单java程序,要带上GUI等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)