`
Ivan_Pig
  • 浏览: 386787 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JavaFX与后台交互

    博客分类:
  • RIA
阅读更多
    目前JavaFX相关的资料都是基本语法,以及界面相关。而JavaFX面向的是RIA,RIA就肯定需要和后台交互,个人研究了一下,遇到了不少问题,共享给大家
   
    首先先看看JavaFX的api,一眼就能看到javafx.io.http包,包里面有三个类,HttpHeaders,HttpRequest,HttpStatus三个类。具体用法,呵呵,看API吧。主要使用的就是HttpRequest类了。API里也有比较详细的例子。
   
    这里有修改此例来实现Http的get和post提交,分别和后台交互。
   
    先写个servlet
   
public class MooServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException {
        String name = request.getParameter("name");

        PrintWriter writer = response.getWriter();
        writer.write("Hello "+ name);
        writer.flush();
        writer.close();
    }
}
    

   
    配置文件自己配吧。
   
    接着编写JavaFX文件。首先以get方式提交,这个很简单。只需要一个onInput方法就够了。


import javafx.io.http.*;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.ext.swing.SwingButton;
import java.io.DataInputStream;
import javafx.scene.layout.HBox;
import javafx.ext.swing.SwingTextField;


def label:SwingTextField = SwingTextField {
    columns: 10
    text: "Ivan"
    editable: true
}

function sendHttp(){
        HttpRequest {
        location:bind "http://localhost:8080/JavaScriptWeb/moo?name={label.text}";

        onInput: function(is: java.io.InputStream) {
            try {
                def data:DataInputStream = new DataInputStream(is);
                label.text = data.readLine();
            } finally {
                is.close();
            }
        }
    }.enqueue();
}




Stage {
    title : "Http"
    scene: Scene {
        width: 200
        height: 200
        content: [HBox{
            content:[label,
            SwingButton {
            text: "Click"
            action: function() {
                sendHttp();
            }
        }
        ]
        }
         ]
    }
}


 
    很像AJAX操作吧

运行界面如下:



    这里有两个需要注意的地方。
  
    1.location那里使用了bind关键字,如果不使用此关键字,那么name值始终是TextField的初始值,不信试试。

    2.我把实例化HttpRequest以及发送包装为一个方法,因为每次发送请求都必须要重新实例化一个HttpRequest,否则报错,不信也可以试试。

    其他关于onInput回调方法,自行查看API.

    下面是Post提交,这个比较郁闷,如果照API上的例子,你找半天都可能不知道怎么提交,网上也没有例子。我摸索了半天才搞定。代码如下。


import javafx.io.http.*;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.ext.swing.SwingButton;
import java.io.DataInputStream;
import javafx.scene.layout.HBox;
import javafx.ext.swing.SwingTextField;


def label:SwingTextField = SwingTextField {
    columns: 10
    text: "Ivan"
    editable: true
}

var t:String= bind "name={label.text}";

function sendHttp(){
    HttpRequest {

        method:HttpRequest.POST;
        location:"http://localhost:8080/JavaScriptWeb/moo";

       onOutput: function(os: java.io.OutputStream) {
            try {
                os.write(t.getBytes());
                os.flush();
            } finally {
                os.close();
            }
        }

        onInput: function(is: java.io.InputStream) {
            try {
                def data:DataInputStream = new DataInputStream(is);
                label.text = data.readLine();
            } finally {
                is.close();
            }
        }
    }.enqueue();
}

Stage {
    title : "Http"
    scene: Scene {
        width: 200
        height: 200
        content: [HBox{
            content:[label,
            SwingButton {
            text: "Click"
            action: function() {
                sendHttp();
            }
        }
        ]
        }
         ]
    }
}


    看似简单。真摸索我还是摸索了半天,原因是,在API里面的例子是继承了HttpRequest,里面设置了两个header,就其中一个header害死人。如果你要post提交,将setHeader("Content-Type", "somecontent/type");这句删除,或者将其修改为setHeader("Content-Type", "application/x-www-form-urlencoded");否则后台getParameter无法取到值。

    与上面相比,有三处改变。
 
    1.location直接写地址,无须跟参数。(get和post之间的区别)

    2.method:HttpRequest.POST;提交方法改为Post。

    3.添加了一个onOutput方法,在其内写入参数。此处的流一定要关闭。如果不关闭,后续方法将不会执行。且此方法必须要覆盖,如果不覆盖同样的程序没有响应。

    OK。现在看来JavaFX和后台交互还是很简单的吧!同时也看到了不足。类似AJAX的请求和响应,那么响应流就需要自己的组装,这个就比较麻烦了。查了些资料,JavaFX有对xml和json的支持,那么具体操作待续
  • 大小: 5.3 KB
11
0
分享到:
评论
3 楼 Ivan_Pig 2009-07-08  
smile于晓飞 写道
请问lz用的是什么开发工具啊

还有 我用的是netbeans
javaFX1.2的版本

为什么 .enqueue()是错误的呢

谢谢lz了   


用的netbeans啊。
1.2语法改了不少,你参考参考文档吧。我也没看
2 楼 smile于晓飞 2009-07-08  
请问lz用的是什么开发工具啊

还有 我用的是netbeans
javaFX1.2的版本

为什么 .enqueue()是错误的呢

谢谢lz了   
1 楼 elf8848 2009-06-25  
朋友, 我也自己写了好久没写出来,  就来看你的了, 谢你了

相关推荐

    javaFX语法后台交互文档(3M)

    【JavaFX语法后台交互文档】主要讲解了JavaFX这一编程语言如何与后台进行交互,以及如何使用JavaFX创建GUI应用程序。JavaFX是一个用于构建桌面、移动和嵌入式设备上富客户端应用程序的平台,它提供了丰富的图形用户...

    JavaFX + MySql 实现学生信息管理系统

    JavaFX支持FXML(FXML是用于描述JavaFX用户界面的XML语法),允许开发者将界面逻辑与业务逻辑分离,提高代码的可读性和可维护性。 MySQL是一款开源、免费的关系型数据库管理系统,广泛应用于各种规模的企业和项目中...

    javafx多线程实现界面实时刷新

    为了解决这个问题,JavaFX提供了对Java多线程特性的良好支持,使我们能够在后台线程中执行这些任务,同时保持UI的流畅和响应。本篇文章将深入探讨如何在JavaFX中通过多线程实现界面实时刷新。 首先,我们需要理解...

    javaFx pdf 阅读软件

    icepdf支持多种功能,如页面渲染、文本选择、链接交互等,是开发PDF相关应用的理想选择。在JavaFX PDF阅读软件中,icepdf被用来处理PDF文档的内部结构,将PDF内容转化为可显示的图像和文本,然后由JavaFX呈现给用户...

    javaFx 完整版项目(Spring+SpringMVC+Mybatis)

    总结来说,"javaFx 完整版项目(Spring+SpringMVC+Mybatis)"是一个综合性的ERP解决方案,利用JavaFX的强大GUI功能和SSM框架的高效企业级开发能力,实现了从用户交互到后台数据处理的完整流程,提供了一个功能强大且...

    javafx+mysql新闻发布查询系统(News)

    在JavaFX中,开发者通常会使用Scene Builder来设计用户界面,包括按钮、文本框、表格视图等组件,以实现用户与应用的交互。例如,一个新闻查询界面可能包含一个文本框供用户输入关键词,一个按钮触发查询操作,以及...

    javaFX 实现截屏

    4. 异步处理:由于截图操作可能会阻塞UI线程,最好在后台线程(如 `Task` 或 `Service`)中执行这些步骤,以保持用户界面的响应性。 在提供的`ScreenCapture` 文件中,可能包含了实现这个功能的源代码。这通常会...

    javafx JAR资源

    8. **FXML**:FXML是一种XML格式的标记语言,用于声明式地定义用户界面,与后台逻辑分离,有助于提高代码的可读性和可维护性。 9. **Scene Builder**:Oracle提供了一个名为Scene Builder的可视化工具,用于拖放式...

    JavaFX_ChatRoom-main.zip

    通过这个项目,我们可以学习到如何利用JavaFX构建一个实时的、多用户交互的聊天环境。 首先,JavaFX的基础知识是必要的。它使用Java语言编写,支持FXML(FXML是用于描述UI布局的XML语言)来分离界面设计和业务逻辑...

    javafx 选课系统

    4. 系统架构:描述模块划分、类与接口的设计,以及各组件间的交互方式。 5. 测试计划:规划系统测试策略,包括单元测试、集成测试和系统测试。 6. 实施与部署:说明如何安装和配置系统,以及运行环境的要求。 ...

    Java程序开发基于SpringBoot和JavaFx

    将Spring Boot与JavaFX结合,可以在后台利用Spring Boot的强大功能处理业务逻辑和数据管理,如数据库操作、RESTful API调用等,而在前台通过JavaFX展示动态、直观的用户界面。这样的组合可以实现前后端分离,提高...

    基于javafx和fxml的超市管理系统源码.zip

    【标题】基于JavaFX和FXML的超市管理系统源码是一个完整的Java应用程序开发示例,它展示了如何使用这两种技术来构建一个交互式的用户界面和后台管理功能。JavaFX是Oracle提供的一个用于创建桌面应用的现代图形用户...

    基于Java、JavaFX开发的下载工具.zip

    4. **网络功能**:Java的内置网络库和JavaFX的结合,使得下载工具能方便地与互联网交互,进行文件的下载和上传。 5. **多线程**:JavaFX支持在GUI应用中优雅地处理多线程问题,确保用户界面的流畅性,而下载任务...

    基于JAVAFX的微信客户端和服务器.zip

    本文将详细介绍一个基于JavaFX技术构建的微信客户端和服务器项目,该项目还整合了JFoenix框架,并采用IntelliJ IDEA作为开发环境,MySQL作为后台数据库。通过分析项目源代码和答辩PPT,我们可以深入理解其设计思路和...

    JavaFX+scenebuilder2.0实现酒店管理系统(数据库)

    虽然没有提供数据库部分的源码,但我们可以假设系统与数据库的交互是通过JavaFX的控制器类和相关的数据库连接库(如JDBC)实现的。通常,这些控制器类会监听GUI上的事件,比如按钮点击,然后执行相应的业务逻辑,如...

    Workshop-javafx-jdbc

    【标题】"Workshop-javafx-jdbc" 是一个编程工作坊项目,专注于JavaFX与...参与这个"Workshop-javafx-jdbc"项目的学习者,将能够掌握JavaFX与数据库交互的关键技术,为开发实际的桌面数据库应用程序打下坚实的基础。

    pro javaFX 2

    这一章节关注JavaFX应用程序如何与Web服务进行交互。 **关键知识点**: - **网络通信**:介绍了JavaFX中用于网络通信的API,包括URL连接和HTTP请求等。 - **JSON和XML解析**:讨论了如何解析从Web服务返回的JSON...

    基于JavaFx的Socket多线程通讯程序实例(含:Server端和Client端)

    学习这个实例,你可以理解如何将JavaFX的UI交互与Socket通信结合,以及如何使用多线程处理并发连接。这对于开发实时通信的应用,如聊天应用或在线游戏,具有重要的实践价值。此外,你还将掌握如何处理网络异常,如...

    大二时期初学java设计的基于Javafx与mysql的车库管理信息系统项目.zip

    在这个项目中,开发者需要编写SQL语句来与数据库进行交互,实现数据的增删改查功能。 6. **DAO(Data Access Object)模式**:DAO模式是Java中常用的数据访问模式,通过创建一个对象(DAO)来封装数据库操作,这样...

    JavaFX学习之Preloader

    在实际开发中,Preloader可以用来加载资源、初始化数据或者执行其他后台任务,从而减轻主应用程序启动时的负担,提高用户体验。同时,使用Preloader也可以避免用户在应用程序启动过程中看到空白屏幕,提升了整体的...

Global site tag (gtag.js) - Google Analytics