详细讲解怎样在Java中运行其它应用程序

详细讲解怎样在Java中运行其它应用程序,第1张

import java io *public class CommandWrapper{Process processThread inThread outpublic CommandWrapper(Process process){this process = processfinal InputStream inputStream =process getInputStream()//final BufferedReaderr=new BufferedReader(new InputStreamReader(inputStream))final byte[] buffer = new byte[ ]out = new Thread(){//String lineint lineNumber= public void run(){try {while (true){int count = inputStream read(buffer)System out println(lineNumber+ : +new String(buffer count ))//line=r readLine()//System out println(lineNumber+ : +line)lineNumber++}}catch (Exception e){}}}final BufferedReader reader =new BufferedReader(new InputStreamReader(System in))final OutputStreamoutputStream = process getOutputStream()in = new Thread(){String linepublic void run(){try{while (true){outputStream write((reader readLine()+ \n ) getBytes())outputStream flush()}}catch (Exception e){}}}}public void startIn(){in start()}public void startOut()嫌衫{out start()}public void interruptIn(){in interrupt()}public void interruptOut(){out interrupt()}public static void main(String[] args){try{CommandWrapper mand= new CommandWrapper(Runtime getRuntime() exec( native ascii ))mand startIn()mand startOut()}catch (Exception e){e printStackTrace()}}}我以native ascii为范例程序和网友给我的那个程序做了对比 发现如下几个在处理这个问题时需要注意的地方 由于不知道目标程序的输入输出顺序 因此只能建立两个单独的线程分别处理输入和输出 这样输入和输出就不会阻塞了 但是友者竖有些目标程序要求有特定的输入输出顺序 而经过这个类封装的结果是在任何状态下都可以输入 程序的任何输出也会被马上反映出来 这是构造通用类的第一个问题 不能直接使用I/O重定向 在最开始的时候我是考虑直接使用I/O重定向的 但是实际的情况是Process的I/O的定义刚好和我的预想相反 我们从Process取得的InputStream实际上是它的好大输出 而取得的OutputStream是它的输入 这样就无法进行I/O重定向了 必须我们进行编码来读取程序的输出和写入控制台的输入 (这里的I/O重定向是指想将它的I/O直接重定向到系统的I/O) 写入控制台的输入 outputStream write((reader readLine()+ \n ) getBytes())outputStream flush()这里有两个问题值得注意 第一个是我们在控制台输入一行数据以后按下回车 那么语句reader readLine()可以正确的得到你的输入 为什么要加那个换行符呢?这是在测试的时候发现的问题 在以native ascii作为例子的时候发现不加这个的话它不能得到控制台的输入 但是我在替那位网友解决的问题的时候他的程序则没有这个问题 因此猜想可能是因为有的程序要求读取的一整行的数据(例如native ascii) 而大部分的命令行程序在编码的时候读取的是整数这样的值或者其他类型的值 他们是以空格或者其他的字符分隔的 因此就不需要那个额外的换行符(例如那位网友的程序读取的是一元二次方程的三个系数) 另外一个问题就是flush方法的使用 在最开始的时候没有想到要这样刷新进去 无论是否加换行符外部程序都无法读取写入的输入 后来才想到要调用一下这个方法 这个也是在我们输出的时候应该注意的一个问题 有些需要马上反应出来的输出一般都在写入以后要调用它 否则输出/输入不能马上反应出来 对于程序的输出 最开始我是构造的一个BufferedReader想以行为单位输出 对于那位网友的程序 结果证明不是很好用 但是以native ascii作为例子运行又没有问题 这个估计和外部程序的代码也有关系 如果外部程序没有输出换行符可能使用BufferedReader就会有问题 但是通过直接读取输出就没有问题了 另外需要注意的就是 System out println(lineNumber+ : +new String(buffer count ))中严格来说应该是 System out println(lineNumber+ : +new String(buffer count))之所以减一是因为读取输入的时候人为的多加了一个换行符 如果这个地方不减一就会多输出一个空行 基于以上的种种原因 要构造一个执行外部程序的包装器类不太好办 特别是文章中提到的几个问题 有时间和兴趣的朋友可以做一下测试 看看以上的问题和猜测是否正确 另外附上一段源代码 是一个fortran的程序 implicit nonereal a b creal dreal root root print* 请输入一元二次方程的系数a b c: read(* *) a b cd=b** *a*cif(d>= ) thenroot =( b+sqrt(d))/( *a)root =( b sqrt(d))/( *a)print* root = root print* root = root elseprint* 一元二次方程没有实根! end ifpauseend lishixinzhi/Article/program/Java/JSP/201311/19704

运行应用程序方法有:双击程序运行文件;右键程序运行文件(或快捷方式),运行;win徽标键+R 打开运行对话窗,输入程序运行文件名称;任务管理器-运行-输入程序运行文件名称;进入命令提示行,输入运行程序命令。

它与应用软件的概念不同,应用软件指使用的目的分类,可以是单一程序或其他从属组件的集合,例如此轮吵Microsoft Office、OpenOffice。

应用程序指单一可执行文桐枣件或单一程序,例如Word、Photoshop。日常中可不将两者仔细区分。一般视程序为软件的一个组成部分。

扩展资料:

请求范围

请求范围与一个森侍 servlet 请求的范围对应;在容器调用 servlet 来处理请求之后,请求范围立即开始。同时会创建一个惟一的范围键。在servlet 完成处理之前请求范围结束。这时,与这个范围相关联的所有对象被自动释放回它们的池。

HTTP会话范围与一个HTTP 会话的生命周期对应。它从创建一个新的HttpSession时开始。这时会创建一个惟一的范围键。它结束于会话被销毁或过期时。这时,与这个范围相关联的所有对象被自动释放回它们的池。

应用程序范围覆盖应用程序的整个生命周期。它开始于把一个应用程序部署到应用服务器时。这时会创建一个惟一的范围键。

如何在苹果的ipad上执行android的应用程式

从现在技术来说,在苹果的ipad上无法通过任何方法执行android的应用程式apk档案

apk是安卓系统安装程式档案的一种格式,ipa是苹果安装档案的格式,apk和ipa只是用在不同的系统上。

如何在Zedboard上执行linux下的应用程式

可芦氏以参考如下方法以实现Linux执行windows软体: 1、安装linux版的vmware,然后通过vmware建立windows虚拟机器,通过vnc实现linux物理机和windows虚拟机器的共享,从而执行windows软体裤旅。 2、在Linux上安装Wine,

linux上的可执行程式是没有后缀名之分的。只要有可以执行许可权就可以执行。

执行也是非常简单的,只需要在终端敲出路径+使用者名称就OK

例如,需要执行的档名叫test

如果你就在可执行档案所在的路径下就可以使用这个

root~#./test

如果不在test坐在的路径可以使用绝对路径,加入你的test所在的路径是/home 下面就这样了

root~#/home/test

这样就可以执行了

1 从命令列执行:

从命令列或者 shell 提示符执行应用程式的一个常用方法是使用 ./ 命令。如果您在 Linux 中使用句号 (。) 和正斜杠 (/),就意味着告诉环境您想要以可执行档案执行该档案。例如,执行一个名为 myapp 的陪纯散可执行档案,您可以使用 ./myapp 命令。

2从桌面执行应用程式

在 Linux 中从桌面执行图形使用者介面 (GUI) 应用程式与在 Windows 中没多大区别。通常,您需要了解特定的桌面环境下应用程式在选单中是如何分组的。Linux 有足够的桌面应用程式,可用于各种任务。有一些应用程式是 Linux 本机固有的,还有另外一些应用程式可能是在一个常用执行时环境中使用 C# 开发的跨平台应用程式,比如,。NET Framework 应用程式。您会发现,使用一个 Wine 这样的虚拟环境,您甚至可以在 Linux 上执行您最喜爱的 Windows 应用程式。

参考文件::elecfans./pld/PLDkaifaban/306232.

ZedBoard开发板上的Zynq是一个ARM PS(processing system, 双核A9 + 储存管理 + 外设)+ PL(programable Logic) 结构,如果不使用PL,zynq的开发和普通的ARM 开发一样。不同的是ARM PS是可配置,因而硬体资讯是不固定的。这也是zynq灵活性的一个表现。电子发烧友网编辑现为读者整合《玩转赛灵思Zedboard开发板》系列文章, 其中包括在ZedBoard开发板上的一些应用例项。其内容包括:

玩转赛灵思Zedboard开发板(1):ZedBoard详解

玩转赛灵思Zedboard开发板(2):ZedBoard最简单的测试工程

玩转赛灵思Zedboard开发板(3):基于Zynq PL的流水灯

玩转赛灵思Zedboard开发板(4):如何使用自带外设IP让ARM PS访问FPGA?

玩转赛灵思Zedboard开发板(5):基于AXI Lite 汇流排的从装置IP设计

从本小节开始,讲着重介绍Zedboard上的嵌入式linux应用,包括使用SDK设计最简单的linux应用程式、linux交叉编译环境搭建、装置驱动编写等内容。本小节使用的linux系统是Digilent官方提供的OOB设计,它是Digilent官网给出的一个完整的、Zedboard可执行的linux 系统,包含了Zedboard上的几个重要的装置驱动如串列埠、USB、乙太网、OLED、HDMI等。当linux在Zedboard上执行起来后,Zedboard就是一个小型的嵌入式系统,使用SDK及Xilinx ARM Linux工具链编译生成的可执行档案可以在这个系统执行。

硬体平台:Digilent ZedBoard;开发环境:Windows XP 32 bit;软体: SDK 14.2。

一、获取Zedboard可执行的linux

Digilent官网给出Zedboard的可执行linux设计ZedBoard_OOB_Design包,可从:digilentinc./Data/Documents/Other/ZedBoard_OOB_Design.zip获取,下载后解压,可以看到包的结构和内容:

boot_image目录:

-- system.bit – 配置FPGA的bit档案

-- u-boot.elf – 引导linux需要的Second-Stage boot loader

-- zynq_f *** l.elf – 配置ARM PS系统的First-Stage boot loader(FSBL)

doc目录:

-- README.txt – 说明档案

hw目录:

-- EDK 14.1版本的XPS工程,用来生成硬体档案和bit档案

linux目录:

-- devicetree_ramdisk.dts – 装置树原始码

-- .config – Linux核心配置档案,用来生成zImage

sd_image目录:

-- BOOT.BIN – 使用boot_images中的三个档案生成的Zynq配置档案

-- devicetree_ramdisk.dtb – 编译后的装置树档案

-- ramdisk8M.image.gz – 编译后的档案系统

-- README – 介绍如何执行OOB设计的说明文件

-- zImage – 编译后的核心

sw目录:

--硬体配置

--FSBL原始码

其中sd_image目录中包含了ZedBoard上能够执行linux的所有档案。将SD卡格式化为Fat32,把sd_image目录档案拷贝到SD 卡根目录下;然后将JP7~JP11设定为SD卡启动模式,将JP2短路,JP3断开,这样可以下一步我们可以把U盘作为USB 从装置挂载到Zedboard上。

图 Zedboard的连线和短路块设定

上电后,等待ARM PS的配置、FPGA的配置(蓝色LED DONE 亮起),之后开始引导Linux系统了。可以从超级终端上看到一系列的引导资讯:

1 U-Boot 2012.04.01-00297-gc319bf9-dirty (Sep 13 2012 - 09:30:49)

2

3 DRAM: 512 MiB

4 WARNING: Caches not enabled

5 MMC: SDHCI: 0

6 Using default environment

直接在命令列输入该档名字;在档案之前加上路径即可; 比如当下目录下的test 执行./test ps:点斜杠表示当前目录

如何在CDH 5上执行Spark应用程式

几个基本概念:

(1)job:包含多个task组成的平行计算,往往由action催生。

(2)stage:job的排程单位。

(3)task:被送到某个executor上的工作单元。

(4)taskSet:一组关联的,相互之间没有shuffle依赖关系的任务组成的任务集。

一个应用程式由一个driver program和多个job构成。一个job由多个stage组成。一个stage由多个没有shuffle关系的task组成。

spark应用程式的执行架构:

(1)简单的说:

由driver向丛集申请资源,丛集分配资源,启动executor。driver将spark应用程式的程式码和档案传送给executor。executor上执行task,执行完之后将结果返回给driver或者写入外界。

(2)复杂点说:

提交应用程式,构建sparkContext,构建DAG图,提交给scheduler进行解析,解析成一个个stage,提交给丛集,由丛集工作管理员进行排程,丛集启动spark executor。driver把程式码和档案传给executor。executor进行各种运算完成task任务。driver上的block tracker记录executor在各个节点上产生的资料块。task执行完之后,将资料写入HDFS上或者其他型别资料库里。

(3)全面点说:

spark应用程式进行各种transformation的计算,最后通过action触发job。提交之后首先通过sparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAGScheduler进行解析,解析时是以shuffle为边界,反向解析,构建stage,stage之间也有依赖关系。这个过程就是对DAG图进行解析划分stage,并且计算出各个stage之间的依赖关系。然后将一个个TaskSet提交给底层排程器,在spark中是提交给taskScheduler处理,生成TaskSet manager,最后提交给executor进行计算,executor多执行绪计算,计算完反馈给TaskSetmanager,再反馈给taskScheduler,然后再反馈回DAGScheduler。全部执行完之后写入资料。

本文主要记录在 CDH5 丛集环境上如何建立一个 Scala 的 maven 工程并且编写、编译和执行一个简单的 Spark 程式

:tuicool./articles/Ajuyqan

:iteblog./archives/1073

上面有教程、程式码演示,请参考了。

建立 maven 工程

使用下面命令建立一个普通的 maven 工程:

bash

$ mvn archetype:generate -DgroupId=.cloudera.sparkwordcount -DartifactId=sparkwordcount -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

将 sparkwordcount 目录重新命名为simplesparkapp,然后,在 simplesparkapp 目录下新增 scala 原始档目录:

bash

$ mkdir -p sparkwordcount/src/main/scalacloudera/sparkwordcount

修改 pom.xml 新增 scala 和 spark 依赖:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12562495.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存