为什么运行不了javafx(java 编程 怎么运行没有 main 函数的 javafx)
大家好,今天来为大家分享为什么运行不了javafx的一些知识点,和java 编程 怎么运行没有 main 函数的 javafx的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
java 编程 怎么运行没有 main 函数的 javafx
在java中,main()方法是java应用程序的入口方法。java虚拟机通过main方法找到需要启动的运行程序,并且检查main函数所在类是否被java虚拟机装载。如果没有装载,那么就装载该类,并且装载所有相关的其他类。因此程序在运行的时候,第一个执行的方法就是main()方法。通常情况下,如果要运行一个类的方法,必须首先实例化出来这个类的一个对象,然后通过"对象名.方法名()"的方式来运行方法,但是因为main是程序的入口,这时候还没有实例化对象,因此将main方法声明为static的,这样这个方法就可以直接通过“类名.方法名()”的方式来调用。
JavaFX绑定探究
数据绑定连接一些对象并且使它们同步尽管Swing的开发者们取决于额外的类库但是绑定是完全融入了JavaFX Script编程语言仔细看一看它运行的库显示了一个完全绑定构架其基本概念与JGoodies Binding和 Beans Binding很相似(在我以前的文章 Binding Beans中有做过比较) JSR(Beans Binding)可能不会成为Java的一部分所以一直寻找可代替品的开发者们会问自己 JavaFX绑定构架是否可以通过简单的Java程序而进行使用
JavaFX建立在普通的Java SE运行上为了在本文中展示这个示例你需要为你的操作系统(在此只支持官方的Windows和Mac OS X)下载合适的JavaFX SDK具体请参考Resources安装installation过程只需要几个步骤在Windows的机器上默认安装地址是C:\Program Files\JavaFX\javafx sdk Mac OS X users should look at/Library/Frameworks/JavaFX framework/Versions/
图 JavaFX SDK基础目录
图显示了JavaFX SDK的基础目录这个bin目录包括可执行编译并运行JavaFX Script程序我们不使用它们 JavaFX(Script)documentation在docs中文件src zip包括部分JavaFX运行的来源如果你打开它你会注意到文件是以stg和 st结尾的最后lib和它的子目录包含库 jars本文的示例取决于它们中的一些
Locations
lib/shared/javafxrt jar包含 sun javafx runtime location包它的类和接口来自基本的JavaFX Binding的构建块例如 Location接口代表一个值它可能是可变的或是不能改变的有效或无效的空的或是非空这样的状态可以通过相应的getters来查询例如 isMutable()如果Location的值是无效的当update()方法被调用时或该值被检索时它会被更新
一个Location的类型是通过子接口来决定的;例如 IntLocation如果你要在src zip中查询IntLocation java你不会看到它这是因为它的来源是来自两个文件XxxLocation st和XxxTemplate stg每个子接口为类型XYZ添加getAsXYZ和and setAsXYZ()还有DoubleLocation FloatLocation ShortLocation CharLocation LongLocation BooleanLocation ByteLocation和 ObjectLocation
其他的对象可能会附属于一个Location当值与地址变化联系在一起的时候 change listeners可以接收到通知最后 Locations是很懒惰的虽然当值无效的时候change listeners会得到通知但是新的值不会被重新计算直到需要它的时候到目前为止我指谈论了接口的问题当然可以为我以上所提到的类型而随时执行Locations
public static void main(String[] args){
final IntVariable i= IntVariable make();
i addChangeListener(new ChangeListener(){
@Override
public boolean onChange(){
System out println( onChange():+ i get());
return false;
}
});
System out println(i get()+
isMutable():+ i isMutable());
IntLocation i= IntConstant make();
System out println(i get()+
isMutable():+ i isMutable());
i set(i get());
}
为了编译并运行LocationDemo请附加lib/shared/javafxrt jar到你的类路径上这个演示示例采用了IntVariable和IntConstant类两个都执行了IntLocation接口因此是Locations使用静态make()方法创建Instances使用get()查询当前值正如你在图中所看到的在初始化引发一个通知之后设置一个值它通过子抽象类ChangeListener来进行处理
图 LocationDemo输出
当地址内容已经改变的时候它的onChange()方法被调用该方法返回一个Boolean值指示监听者是否仍然有效返回false将导致监听者从监听者名单上删除 Javadoc建议当相关的弱引用被报告清除的时候那些做它们自己弱引用管理的监听者应该返回false
就像JGoodies Binding的ValueModel还有Beans Binding的Property一样 Locations读取和编写类型值提供了一个方法它们也可以通知注册的监听者关于值的变化最后你将会在以下的小节中看到它们用于建立绑定
建立绑定
像Beans Binding和JGoodies Binding一样 JavaFX运行包含一个辅助类来建立绑定 sun javafx runtime location Bindings它是用于在两个Locations之间建立bijective关系这个意思是说如果一个值被更新它所对应的也会被更新在Locations被实例之后它们被传递到bijectiveBind()
public class BindingDemo{
private static IntLocation i i;
public static void main(String[] args){
i= IntVariable make();
i= IntVariable make();
Bindings bijectiveBind(i i);
showValues();
i setAsInt();
showValues();
i setAsInt();
showValues();
}
private static void showValues(){
System out println( i:+ i get());
System out println( i:+ i get());
}
}
bijectiveBind(i i)在i和 i之间建立两种依赖关系如果其中一个被更新例如调用setAsInt()其他的值也会变化为了到达此目的执行附加了两个监听者在Locations中分享状态方便的方法makeBijectiveBind()创建一个新的Location并它绑定到现存的绑定上面如下所示
i= IntVariable make();
i= Bindings makeBijectiveBind(i);
BindingDemo展示了如何使用它它包含在/today////sources zip中具体细节请参考Resources图显示了它的输出
图 BindingDemo输出
请注意只有可编译的类型才能使用bijectiveBind()来进行绑定以下的代码行取自BindingDemo java(包含在sources zip中的)第一眼看上去代码没什么问题但是它们会抛出ClassCastException异常这里发生什么事情了呢?
ObjectLocation loc= IntVariable make();
ObjectLocation loc= BooleanVariable make();
Bindings bijectiveBind(loc loc);
在创建绑定的过程中 loc get()结果被传递到loc的set()方法中这个不会为Boolean和 Integer工作的为了避免这种问题只要适当的确定参数泛型类型ObjectLocation目前为止我们已经看到两个变量是如何被同步的以下的小节中将看一看Swing组件是如何被绑定的
绑定Swing组件
几乎每个JavaFX Script教程都是由显示一个窗口按钮或是标签的小程序开始的 JavaFX使用Swing来构建并显示这些组件因此我们可以假设Swing融入了JavaFX运行不久你将会看到这个也会应用于绑定
lib/desktop/javafx swing jar文件包含javafx ext swing包它的类包含了大多数常见的Swing组件如果你检查它们你将会注意到它们用$开始显示各区域它们的类型是ObjectVariable它可以执行ObjectLocation
图在Eclipse的Members视图中SwingLabel
考虑到这个接口属于 sun javafx runtime location包它是安全的假设这样的Locations可以绑定到其他的变量上以下的程序展示你是如何做到这个的为了编译并运行这个示例请添加lib/shared/javafxrt jar lib/desktop/javafx swing jar lib/desktop/Scenario jar以及 lib/desktop/javafxgui jar到你的类路径上
public class SwingDemo{
public static void main(String[] args){
JFrame f= new JFrame();
f setDefaultCloseOperation(JFrame EXIT_ON_CLOSE);
JPanel p= new JPanel(new BorderLayout());
f setContentPane(p);
SwingLabel label= new SwingLabel();
ObjectLocation text=
Bindings makeBijectiveBind(label$text);
p add(label getJComponent() BorderLayout CENTER);
f pack();
f setVisible(true);
text set( Hello JavaFX!);
}
}
除了这个很有用的创建并显示窗口的Swing代码之外还有三件比较重要的事情要做SwingLabel被实例化并分配到label
Location被分配到test并绑定到label的$text上
标签被有层次的添加到组件上
请注意你不能直接添加SwingLabel到容器中相反它的getJComponent()方法用来获取JComponent实例
虽然这个简单的例子展示了一个Swing组件如何被绑定到一个变量上的但是却没有说明使用JavaFX绑定的好处在我以前的文章 Binding Beans中我演示了如何使用JGoodies Binding和 Beans Binding来执行一个简单的音量控制
VolumeControl示例
音量控制是基于一个简单的特定应用的POJO叫做Volume它有两个区域 volume和mute如图所示它通过一个复选框和一个滑块进行操作标签显示现在的volume值除此之外 mute控制音量是否调整
图音量控制示例
涉及Swing组件和POJO区域之间的关系如下
复选框设置mute
滑块设置volume
Mute选择或不选择复选框
Volume设置成滑块的位置
Mute启用或禁用滑块
Volume设置标签文本
完整的来源包含在sources zip中细节请参考Resources部分它的结构很像我以前的文章中的版本所以很容易比较不同的版本为了编译并运行VolumeControl请添加lib/shared/javafxrt jar lib/desktop/javafx swing jar lib/desktop/Scenario jar和lib/desktop/javafxgui jar到你的类路径
首先所有相关的组件都要初始化这个发生在initComponents()中例如垂直坏块被创建并有如下设置
sliderVolume= new SwingSlider();
sliderVolume$vertical set(true);
在initEventHandling()中建立绑定例如复选框与mute链接用以下命令Bindings bijectiveBind(checkboxMute$selected volume mute);当复选框被选择的时候禁用滑块是通过添加一个监听者到mute上实现的
volume mute addChangeListener(new ChangeListener(){
@Override
public boolean onChange(){
sliderVolume$enabled set(! volume mute get());
return true;
}
});
每次volume mute改变的时候 onChange()就会被调用如果它变成true滑块就被禁用如果变成false滑块就再次使用这个状态用sliderVolume$enabled set()来设置相同的方法同样适用于创建标签文本滑块的值用Integer代表正如我们早前已经看到的它不能绑定到Strings上转换完成如下public boolean onChange(){
labelInfo$text set(volume volume get() toString());
return true;
}
通过使用toString() get()结果变成a String并传递labelInfo$text set()很惊讶的看到JavaFX绑定在Swing应用程序中的使用是如此简单虽然绑定构架还没有为这个所设计但是它是一个相当体面的工作尽管如此本文还是故意忽视了一些问题
Sun会允许使用并可能重新分配部分JavaFX运行给非JavaFX应用程序吗?
如何安全使用内部类?这里所描述的包还没有被设计成公共的APIS
为什么没有成熟的绑定构架给Swing开发者们使用?
lishixinzhi/Article/program/Java/JSP/201311/19126如何在eclipse中安装java fx
第一步下载
Download the latest release of the Eclipse 4.3 SDK or of the Eclipse 3.8 SDK fromdownload.eclipse.org
单击Eclipse 4.3 SDK超链接跳转到下载页面
页面中会显示下载项
Latest Downloads
Build Name Build Status Build Date
4.3.2(3 of 3 platforms) Fri, 21 Feb 2014-- 17:00(-0500)
4.4M5(3 of 3 platforms) Thu, 23 Jan 2014-- 16:00(-0500)
I20140306-1200(2 of 3 platforms) Thu, 6 Mar 2014-- 12:00(-0500)
4.3.2RC4a(3 of 3 platforms) Fri, 21 Feb 2014-- 17:00(-0500)
N20140301-1500(2 of 3 platforms) Sat, 1 Mar 2014-- 15:00(-0500)
这里选择目前最新的4.3.2
说明中第二步是从Latest Released(最新发布)中下载
但我看了下两个是一样的都是sdk
这里点击4.3.2跳转到下载地址页面
在页面中可以看到这一段
Download now: Eclipse SDK
点击Eclipse SDK
跳转到下载地址列表
页面上显示了很多地址
Eclipse SDK
Status Platform Download Size File Checksum
Windows(Supported Versions)(http) 191 MB eclipse-SDK-4.3.2-win32.zip(md5)(sha1)
Windows(x86_64)(Supported Versions)(http) 191 MB eclipse-SDK-4.3.2-win32-x86_64.zip(md5)(sha1)
Linux(x86/GTK 2)(Supported Versions)(http) 190 MB eclipse-SDK-4.3.2-linux-gtk.tar.gz(md5)(sha1)
Linux(x86_64/GTK 2)(Supported Versions)(http) 190 MB eclipse-SDK-4.3.2-linux-gtk-x86_64.tar.gz(md5)(sha1)
Linux(PPC/GTK 2)(Supported Versions)(http) 188 MB eclipse-SDK-4.3.2-linux-gtk-ppc.tar.gz(md5)(sha1)
Linux(PPC64/GTK 2)(Supported Versions)(http) 188 MB eclipse-SDK-4.3.2-linux-gtk-ppc64.tar.gz(md5)(sha1)
Linux(s390x/GTK 2)(Supported Versions)(http) 188 MB eclipse-SDK-4.3.2-linux-gtk-s390x.tar.gz(md5)(sha1)
Linux(s390/GTK 2)(Supported Versions)(http) 188 MB eclipse-SDK-4.3.2-linux-gtk-s390.tar.gz(md5)(sha1)
Solaris 10(SPARC/GTK 2)(http) 188 MB eclipse-SDK-4.3.2-solaris-gtk.zip(md5)(sha1)
Solaris 10(x86/GTK 2)(http) 188 MB eclipse-SDK-4.3.2-solaris-gtk-x86.zip(md5)(sha1)
HP-UX(ia64/GTK 2)(http) 188 MB eclipse-SDK-4.3.2-hpux-gtk-ia64.zip(md5)(sha1)
AIX(PPC/GTK 2)(http) 189 MB eclipse-SDK-4.3.2-aix-gtk-ppc.zip(md5)(sha1)
AIX(PPC64/GTK 2)(http) 189 MB eclipse-SDK-4.3.2-aix-gtk-ppc64.zip(md5)(sha1)
Mac OSX(Mac/Cocoa)(Supported Versions)(http) 188 MB eclipse-SDK-4.3.2-macosx-cocoa.tar.gz(md5)(sha1)
Mac OSX(Mac/Cocoa/x86_64)(Supported Versions)(http) 190 MB eclipse-SDK-4.3.2-macosx-cocoa-x86_64.tar.gz(md5)(sha1)
注意!第一次看会不知道哪里是下载
点Windows(Supported Versions)会直接跳转到说明页面上去
搞得人晕头转向
这里正确的是点击(http)
然后就开始下载了
第二步安装
到这里你就成功一半了。
然而容易出现错误的地方也在这里。
如果只添加了插件安装地址的话安装到一半就会报错
首先打开eclipse SDK
依照安装的一般方法在Help中打开Install New Software
重点!!!
在这个地方首先添加Xtext的升级更新地址
http://download.eclipse.org/modeling/tmf/xtext/updates/composite/releases/
Name随便填
添加了之后才能添加
http://download.eclipse.org/efxclipse/updates-released/0.9.0/site
选择版本
这里我们是kepler版本所以选择e(fx)clipse- IDE- kepler
安装就会正常结束了
完成后会要求重启eclipse
重启就完成了安装
第三步新建一个工程
到这里新建工程就很简单了
和新建普通Java Project一样
在eclipse的package explorer中右键New→ Other...
就可以看到JavaFX的文件夹
在里面选择JavaFX Project
系统就会默认新建一个JavaFX模板
在有Main方法文件上run一下
默认就是一个空白窗口弹出
到此说明全部结束
当然我个人想要把applet嵌入到网页里的话
还可以邮件添加JavaFX Html Template(虽然还没试过)
至于我为什么要选择JavaFX
Oracle网站里有关于JavaFX的sample
http://www.oracle.com/technetwork/java/javafx/samples/index.html
下面有两个范例一个是用HTML嵌入插件的一个是可以用swing做的
这里打开Ensemble你会发现sample本身都是用jfx来做的
炒鸡赞
Try Ensemble running inside browser as an applet
Try Ensemble running as a Java Web Start application.
Try Swing chart running inside browser as an applet
Try Swing chart running as a Java Web Start application.
装完jfx的eclipse里也有sample一个
看上去非常好支持原生Java还支持3D
网上也查了速度优化也不错那个赞……
总之自己试试就知道了
番外关于applet插件
因为我原来安装过Java所以电脑上有
运行J2SE程序也只用在环境里配置一下就好了
但问题是网页上的applet怎么都提示要安装
网上查了一下似乎只能用exe安装包安装jre
据说是需要写注册表还要安装浏览器插件
想了一下原理也确实是这样
感觉这一点oracle要是能改进就好了
番外关于完整版e(fx)clipse下载
有人说e(fx)clipse有完整版的为什么还要手动去装插件?
答曰那个完整版的eclipse里面集成了几乎所有的工具
而这些工具有八成以上我几乎都不会用到
我为啥要装上去?
当然你选择装这种傻瓜版的之后再把多的插件卸掉也行
不过会不会遇到其它麻烦就不得而知了
番外关于eclipse插件没装成功时
为什么运行不了javafx的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java 编程 怎么运行没有 main 函数的 javafx、为什么运行不了javafx的信息别忘了在本站进行查找哦。