JavaFX教程-操作

ZDNet软件频道 时间:2008-08-02 作者: |  我要评论()
本文关键词:操作 教程 JavaFX 软件
在JavaFX中使用operation关键字声明过程(procedure)。

JavaFX中使用operation关键字声明过程(procedure)。例如:

 import java.lang.StringIndexOutOfBoundsException;
 operation substring(s:String, n:Number): String {
  try {
   return s.substring(n);
  } catch (e:StringIndexOutOfBoundsException) {
   throw "sorry, index out of bounds";
  }
 }

在上例中定义了一个称为“substring”的新过程,它接受两个参数:第一为字符串类型的参数“s”,第二为Number类型的参数“n”,而返回值为字符串类型。

除了从前提到的赋值、delete、insert语句之外,下面的语句也可以在过程体中使用:

表达式语句
一个基本的表达式可以被用作一条语句,例如下面示例中的"Hello World!":

       System.out.println("Hello World!");


If语句
JavaFX的if语句用法类似Java,除了大括号必须环绕随后的子句(除非else子句是另一个if语句)之外。

例如:

 if (condition1) {
  System.out.println("Condition 1");
 } else if (condition2) {
  System.out.println("Condition2");
 } else {
  System.out.println("not Condition 1 or Condition 2");
 }


While语句
JavaFX的while语句用法与Java类似,除了大括号必须环绕语句体之外。

例如:

 var i = 0;
 while (i < 10) {
  if (i > 5) {
   break;
  }
  System.out.println("i = ");
  i += 1;
 }


Try语句
JavaFX的try语句用法类似Java,但它具有JavaFX变量声明语法。注意:在JavaFX中,任意对象都能够被抛出和捕捉,而并非仅仅是java.lang.Throwable的继承类。

例如:

 try {
  throw "Hello";
 } catch (s:String) {
  System.out.println("caught a String: ");
 } catch (any) {
  System.out.println("caught something not a String: ");
 } finally {
  System.out.println("finally...");
 }


For语句
JavaFX的for语句头与foreach列表推导操作符(list comprehension operator)使用相同的语法。但是,在下面示例中for语句体处理的是由列表推导生成的成员。

例如:

 for (i in [0..10]) {
  System.out.println("i = ");
 }

 // print only the even numbers using a filter
 for (i in [0..10] where i % 2 == 0) {
  System.out.println("i = ");
 }

 // print only the odd numbers using a range expression
 for (i in [1,3..10]) {
  System.out.println("i = ");
 }

 // print the cartesian product
 for (i in [0..10], j in [0..10]) {
  System.out.println(i);
  System.out.println(j);
 }


Return语句
JavaFX的return语句与Java相同:
例如:

 operation add(x, y) {
  return x + y;
 }


Throw语句
JavaFX的throw语句类似Java。但是在JavaFX中能够抛出任何对象,而不仅仅是java.lang.Throwable的继承类。
例如:

 import java.lang.Exception;

 operation foo() {
  throw new Exception("this is a java exception");
 }

 operation bar() {
  throw "just a string";
 }


Break和Continue语句
JavaFX的break和 continue语句用法Java不同的之处:前者不支持标签。像在Java中一样,break和 continue必须出现在while或者for语句体中。
例如:

 operation foo() {
  for (i in [0..10]) {
   if (i > 5) {
    break;
   }
   if (i % 2 == 0) {
    continue;
   }
   System.out.println(i);
  }
 }

 operation bar() {
  var i = 0;
  while (i < 10) {
   if (i > 5) {
    break;
   }
   if (i % 2 == 0) {
    continue;
   }
   System.out.println(i);
   i += 1;
  }
 }


Do语句
JavaFX的do语句允许使用者在后台线程中执行一块JavaFX代码,以便AWT事件调度线程继续处理事件,从而防止UI平台出现挂起现象。目前,在执行后台线程时采用java.awt.EventQueue实现了对事件的出/入队操作。通常情况下,所有的JavaFX代码都在AWT事件调度线程中执行,只有包含在 do语句体中的语句被允许在另一个线程中执行。这些代码必须只访问Java对象,如果需要的话,那些Java对象还必须处理其自身的线程同步。

例如:

 import java.net.URL;
 import java.lang.StringBuffer;
 import java.lang.System;
 import java.io.InputStreamReader;
 import java.io.BufferedReader;

 


 // in the AWT EDT
 var result = new StringBuffer();
 
 do {
  // now in a background thread
  var url = new URL  var is = url.openStream();
  var reader = new BufferedReader(new InputStreamReader(is));
  var line;
  while (true) {
   line = reader.readLine();
   if (line == null) {
    break;
   }
   result.append(line);
   result.append("n");
  }
 }
 // now back in the EDT
 System.out.println("result = ");
在上面的示例中,在事件调度线程(EDT)中正在执行的那些绿色代码在do语句(红色代码)执行期间将被阻塞。但如果在等待后台线程完成的期间,一个新的事件调度循环被建立在调用堆栈上,那么在执行do语句的同时这些GUI事件将继续被处理。不幸的是,由于它能够引发建立在堆栈上的多重事件调度循环,乃至在糟糕的情况下引起堆栈溢出异常,而目前并没有一种对此称得上优秀的解决方案。

 

do later
do语句的第二种形式(do later):它允许在事件调度线程中的语句体内进行异步执行,而不是在后台线程中执行(此功能由java.awt.EventQueue.invokeLater提供)。顾名思义,do later语句体在事件调度线程执行完成后才被执行。下面是一个例如:

 import java.lang.System;
 var saying1 = "Hello World!";
 var saying2 = "Goodbye Cruel World!";
 do later {
  System.out.println(saying1);
 }
 System.out.println(saying2);

运行上面的代码将产生如下输出:
 Goodbye Cruel World!
 Hello World!

操作

教程

JavaFX

软件


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134