我的应用程序的预加载器处理特定于应用程序的初始化.现在我正在尝试扩展它,以便预加载器还显示下载的应用程序JAR的进度.
为什么预加载器在第2阶段没有加载,因为这应该处理PreloaderFx::handleProgressNotification();
跟踪JAR的下载我想?
2016年3月14日更新:使用DownloadServiceListener解决这个问题的方法是什么?如何将其连接到JavaFX阶段?
根据Oracle的说法,启动应用程序有4个阶段:
阶段2:加载和准备:从网络或磁盘缓存加载所需的资源,并进行验证过程.所有执行模式都会看到默认或自定义预加载器.在此阶段,应显示我的自定义预加载器.
阶段3:特定于应用程序的初始化:应用程序已启动,但可能需要在其完全正常运行之前加载其他资源或执行其他冗长的准备工作.目前,我的自定义预加载器显示如下:
我注意到的第一件事是,在阶段2中,未显示处理应用程序JAR下载的默认JavaFX预加载器.因此,用户感觉程序没有提前启动或终止,使他们多次打开JNLP文件.下载JAR后,我们进入阶段3并显示预加载器.
但是,我希望我的自定义预加载器能够处理ProgressBar中的下载进度(阶段2).我使一切尽可能简单,以便在应用程序启动期间跟踪发生的事件.这是基于Jewelsea和Oracle示例的示例:
预载:
public class PreloaderFX extends Preloader {
Stage stage;
//boolean noLoadingProgress = true;
public static final String APPLICATION_ICON
= "http://cdn1.iconfinder.com/data/icons/Copenhagen/PNG/32/people.png";
public static final String SPLASH_IMAGE
= "http://fxexperience.com/wp-content/uploads/2010/06/logo.png";
private Pane splashLayout;
private ProgressBar loadProgress;
private Label progressText;
private static final int SPLASH_WIDTH = 676;
private static final …
Run Code Online (Sandbox Code Playgroud) 各位晚上好,
我已经在这个主题上发现了很多帖子,但我仍然无法将一个对象从Controller1传递给Controller2.有没有一个完整的教程或一些示例项目,这样做?
在我遇到困难之前,我已经走到了这一步:
国家级
public class Country {
private SimpleStringProperty country = new SimpleStringProperty("");
//Constructor
public Country() {
}
//GETTERS
public String getCountry() {
return country.get();
}
//SETTERS
public void setCountry(String value) {
country.set(value);
}
@Override
public String toString() {
return getCountry();
}
}
Run Code Online (Sandbox Code Playgroud)
程序启动时,主要的FXML被加载(Sample.fxml).其中包含一个边框窗格,顶部面板中有一个菜单栏,中间有一个内容窗格.在初始化时,我创建一个新的Country对象并将其存储在全局变量中.我有一个方法,当单击一个菜单项时,将另一个FXML加载到内容窗格中:
SampleController.java
public class SampleController implements Initializable {
@FXML
private Pane pContent;
private Country c;
@FXML
private void handleButtonAction(ActionEvent event) throws IOException {
System.out.println(c); //this prints Belgium, which is correct
URL url = getClass().getResource("Sub1.fxml");
FXMLLoader fxmlloader …
Run Code Online (Sandbox Code Playgroud) 我在javafx2.2中偶然发现了Comboboxes的一个问题.这是场景:
此窗格包含6个组合框.其中三个有固定项:cboReport,cboSales,cboSend.其中三个从db(ObservableList)获取数据,并在窗格变为可见时填充:cboFile,cboCustomer,cboVet
窗口关闭时,窗格上的数据将通过resetGUI_editFilePane()方法重置.有像这样的行:
...
cboReport.getSelectionModel().clearSelection();
cboSales.getSelectionModel().clearSelection();
cboSend.getSelectionModel().clearSelection();
cboFile.getSelectionModel().clearSelection();
cboCustomer.getSelectionModel().clearSelection();
cboVet.getSelectionModel().clearSelection();
cboFile.getItems().clear();
cboCustomer.getItems().clear();
cboVet.getItems.clear();
...
Run Code Online (Sandbox Code Playgroud)
当用户通过按下"editFile"按钮再次打开窗格时,我注意到只有"固定项目"组合框已经清除了它们的选择,动态填充的组合框显示最后选择的项目,尽管选择本身的值是null
.这看起来像是一个图形错误或我做错了什么?
有没有解决这个问题的方法或重置组合框的最佳方法是什么?
编辑2014/08/27:
这是正式的错误(clearSelection()不清楚值):https:
//bugs.openjdk.java.net/browse/JDK-8097244
官方的"解决方法"是清除选择后清除ComboBox的值.
cb.getSelectionModel().clearSelection();
// Clear value of ComboBox because clearSelection() does not do it
cb.setValue(null);
Run Code Online (Sandbox Code Playgroud) 如何在ComboBox
使用FXML中设置默认值?
<ComboBox fx:id="cbo_Bacteriologie_Aesculine" prefHeight="21.0" prefWidth="105.0" GridPane.columnIndex="1" GridPane.rowIndex="0">
<items>
<FXCollections fx:factory="observableArrayList">
<String fx:value="NVT" />
<String fx:value="Bezig" />
<String fx:value="Positief" />
<String fx:value="Negatief" />
</FXCollections>
</items>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)
我希望NVT
默认选中.我尝试添加selected="selected"
,但似乎没有找到正确的语法.
是否可以使用Scene Builder编辑列出的项目?我似乎找不到它.
我现在正在尝试Jersey,按照此链接在netbeans中设置一个Web服务.我有我的实体类和我的REST类.它适用于从javafx2客户端添加,编辑,删除,请求对象(在本例中为Users对象).
但是,现在我尝试向我的webservice添加一个新方法,以进行一些简单的身份验证.首先,我在Users.java文件中添加了一个新的命名查询(Users.login):
@NamedQueries({
@NamedQuery(name = "Users.findAll", query = "SELECT u FROM Users u"),
@NamedQuery(name = "Users.login", query = "SELECT u FROM Users u WHERE u.username = :username AND u.password = :password"),
@NamedQuery(name = "Users.findById", query = "SELECT u FROM Users u WHERE u.id = :id"),
@NamedQuery(name = "Users.findByUserlevel", query = "SELECT u FROM Users u WHERE u.userlevel = :userlevel"),
@NamedQuery(name = "Users.findByDisabled", query = "SELECT u FROM Users u WHERE u.disabled = :disabled")
})
Run Code Online (Sandbox Code Playgroud)
然后我将以下代码添加到我的UsersFacadeREST.java文件(由Netbeans 7.2生成):
@GET
@Path("{username}/{password}") …
Run Code Online (Sandbox Code Playgroud) 我在过去的6个月里一直致力于一个项目.对于这个项目,我有一个glassfish服务器实例,其中部署了webservice.在客户端,我正在使用JavaFX2.2,它使用BASIC身份验证对Jersey(XML请求/响应,没有JSON)执行REST请求.
当用户启动程序(JWS/JNLP)时,通常他们只需在自己的登录窗口中输入他们的凭据,按下登录按钮并开始工作.但是从7u21开始,由于某种原因,我得到了额外的Java"需要身份验证"弹出窗口(可能是因为7u21中的安全性已经改变).
为了确保它与Java版本之间的兼容性问题无关,我还将服务器更新为7u21,因此:
如果我点击上面显示的"需要验证"窗口中的取消按钮,程序会启动,但在执行请求时它不会运行稳定:
java.io.IOException: stream is closed
file:/D:/NetBeansProjects/MIT_20130516/CL_KenoM/dist/CL_KenoM.jar!/GUI/cow/ListCow.fxml
at com.sun.jersey.api.client.ClientResponse.close(ClientResponse.java:615)
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:570)
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:535)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:696)
at com.sun.jersey.api.client.WebResource.access$300(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:512)
at DA.CowsClient.getCowsByUserId(CowsClient.java:96)
at GUI.cow.ListCowController.initialize(ListCowController.java:728)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2152)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2028)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2744)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2723)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2709)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2696)
at Classes.Context.showContentPane(Context.java:186)
at GUI.user.ListUserController.openAddData(ListUserController.java:389)
at GUI.user.ListUserController.access$100(ListUserController.java:55)
at GUI.user.ListUserController$8.handle(ListUserController.java:657)
at GUI.user.ListUserController$8.handle(ListUserController.java:652)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:69)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:33)
at javafx.event.Event.fireEvent(Event.java:171)
at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3117)
at javafx.scene.Scene$ClickGenerator.access$8600(Scene.java:3055) …
Run Code Online (Sandbox Code Playgroud) 自2月以来,GlobalSign仅颁发EV代码签名证书.这意味着代码签名必须使用硬件令牌(Safenet USB eTokens)完成.
由于我不得不切换到EV代码签名,我注意到在签署我的应用程序时会有大量的时间增加.从使用常规Java密钥库的几分钟到使用eToken超过40分钟.
根据GlobalSign网站,我应该在我的罐子上签名如下:
jarsigner -keystore NONE -storetype PKCS11 -tsa http://timestamp.globalsign.com/scripts/timestamp.dll -providerClass sun.security.pkcs11.SunPKCS11 -providerArg eToken.config -storepass mypass myapp.jar myalias
Run Code Online (Sandbox Code Playgroud)
我联系了GlobalSign的支持,但他们无法帮助我,因为签名确实有效......只是非常慢.
我试过的事情:
对缓慢的签名没有任何影响.有没有人有其他想法或有同样的问题?
我最近开始尝试使用Maven.作为测试,我正在尝试创建一个简单的JavaFX8 webstart应用程序.
为此,我使用了Netbeans 8中Maven类别下的JavaFX示例.这给了我一个简单的HelloWorld应用程序:
我在我的pom.xml文件中添加了一个名为'jnlp'的新配置文件.这样就可以在构建项目时创建一个JNLP文件(使用webstart maven插件).
....
<profiles>
<profile>
<id>jnlp</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>webstart-maven-plugin</artifactId>
<version>1.0-beta-6</version>
<dependencies>
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>webstart-pack200-impl</artifactId>
<version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>keytool-api-1.7</artifactId>
<version>1.5</version>
</dependency>
</dependencies>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jnlp</goal>
</goals>
</execution>
</executions>
<configuration>
<codebase>http://(my_url)/maven/</codebase> //replaced the url obviously :)
<jnlp>
<mainClass>com.mycompany.mavenprojecthelloworld.MainApp</mainClass>
</jnlp>
<pack200>
<enabled>false</enabled>
</pack200>
<sign>
<keystore>${project.basedir}/src/main/jnlp/mykeystore</keystore>
<keypass>mykeypass</keypass>
<storepass>mystorepass</storepass>
<alias>myalias</alias>
<verify>true</verify>
</sign>
<verbose>true</verbose>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)
当我构建它时,它会在目录中生成一个launch.jnlp文件和一个mavenprojectHelloWorld-1.0-SNAPSHOT.jar文件/target/jnlp
.我用jarsigner仔细检查了我的jar文件是否正确签名.这是输出:
我将launch.jnlp和mavenprojectHelloWorld-1.0-SNAPSHOT.jar文件复制到我的webhost(http://(my_url)/ maven)并通过启动JNLP文件启动了HelloWorld应用程序.但是,当我这样做时,我收到一条消息'Java …
上周末我打电话给客户,告诉我他们的Java程序在导入数据时没有响应.数据是一个简单的Excel工作簿,包含4个工作表.正在从列中读取所有数据并将其添加到数据库中.
所以我开始调查并得到了一些奇怪的结果.
第一次运行
第二次运行
第一次运行
在这种情况下,我遇到了客户报告的相同问题,程序在经过一段时间的导入过程后停止响应.这是因为我达到了最大堆大小(据我所知)(红色圆圈).
第二次运行
所以我决定通过在JNLP文件中添加以下内容来增加初始堆大小和最大堆大小:initial-heap-size="512m" max-heap-size="1024m"
.当我再次测试导入时,它似乎工作,但是我注意到与前两种情况相比,使用的内存要多得多:
initial-heap-size="512m" max-heap-size="1024m"
为此问题添加了有效的解决方案?我正在尝试将 Lombok 与 JavaFX 属性结合使用:
@Data
public class Country {
private SimpleIntegerProperty id = new SimpleIntegerProperty();
private SimpleStringProperty name = new SimpleStringProperty();
}
Run Code Online (Sandbox Code Playgroud)
这会为属性本身生成 getter 和 setter:
但是,我希望(/喜欢)JavaFX 中的这个:
这在 Lombok 中受支持吗?我没有找到太多关于 Lombok 与 JavaFX 结合的信息(或者我一定是搜索错误)。我对 Lombok 还不是很熟悉,所以如果这是一个基本问题,我很抱歉。
java ×8
javafx-2 ×5
javafx-8 ×4
jnlp ×3
code-signing ×2
combobox ×2
fxml ×2
jersey ×2
controller ×1
heap-memory ×1
jar-signing ×1
javafx ×1
lombok ×1
manifest ×1
maven ×1
memory ×1
memory-leaks ×1
rest ×1