Eclipseからメインメソッドを実行するときに問題なく動作するjavaFxアプリケーションがあります。しかし、ファイルを選択するためにFileChooseを使用するボタンをクリックすると、アプリケーションを実行可能な.jarに変換して.jarを実行すると、このエラーが発生します。アプリケーションが.jarに変換されたときにFileChooserが動作しない
「スレッドの例外 『スレッド20』 java.lang.IllegalStateException:Thisoperationのみイベントスレッド上で許可されている。currentThread =スレッド-20」
は、ここで私が持っているコードと、再びこのコードの作品があります私がEclipseからアプリケーションを実行したときに素晴らしい。ちょうど.jarに変換されたときではない。私はアプリケーションをjarファイルに変換するためにeclipseを使いました。
public void uploadMessagesButtonActionPerformed(ActionEvent event) {
if(uploadCSVThread.isAlive()) {
uploadCSVThread.interrupt();
try {
uploadCSVThread.join();
} catch(InterruptedException e) {
e.printStackTrace();
}
}
uploadCSVThread = new Thread() {
public void run() {
Platform.runLater(new Runnable() {
public void run() {
loader.setProgress(0.0);
loader.setVisible(true);
}
});
FileChooser currUploadFile = new FileChooser();
File selectedFile = currUploadFile.showOpenDialog(null);
if(selectedFile != null) {
System.out.println(selectedFile.getPath());
try {
FileReader currRdr = new FileReader(selectedFile);
CSVReader currReader = new CSVReader(currRdr);
final ArrayList<String[]> listOfMessages = (ArrayList<String[]>) currReader.readAll();
for(int i = 0; i < listOfMessages.size(); i++) {
final int x = i;
String[] shipmentMessages = listOfMessages.get(i);
//String[] shipmentMessages = currReader.readNext();
//while(shipmentMessages != null) {
/*for(int i = 0; i < shipmentMessages.length; i++) {
System.out.println("shipmentMessages -> " + shipmentMessages[i]);
}*/
Map<String, String> headers = createHeaderMapFromHeaderString(shipmentMessages[0], "\n");
String body = shipmentMessages[1];
shipmentMessages = currReader.readNext();
try {
/*ObjectName queue = new ObjectName("org.apache.activemq:type=Broker,brokerName=" + currentBrokerName
+ ",destinationType=Queue,destinationName=" + VM_AND_DIRECTVM_Q);*/
//headers.put("TO_DESTINATION", returnSelectedEndpoints());
QueueViewMBean queueView = (QueueViewMBean) MBeanServerInvocationHandler.newProxyInstance(conn,
currentQueue,
QueueViewMBean.class,
true);
queueView.sendTextMessage(headers, body, serverLookUp.serverUserNameLookUp(currentServer), serverLookUp.serverPasswordLookUp(currentServer));
Platform.runLater(new Runnable() {
public void run() {
loader.setProgress((double)x/(double)listOfMessages.size());
}
});
} catch (MalformedObjectNameException e) {
logger.error(e);
}
}
updateQueueInList(currentQueue, currentQueueIndx, true);
readQueue(conn, currentQueue);
loader.setVisible(false);
} catch (Exception e) {
messageCouldntSendPopUpBox.setVisible(true);
logger.error(e);
}
}
loader.setVisible(false);
}
};
uploadCSVThread.start();
}
'FileChooser'を自分の' Thread'に入れてみましたか? –
それはどういう意味ですか?ある意味では、それ自体のスレッドの中では、uploadCSVThread? –
私はそれをPlatform.runlaterスレッドに入れようとしましたが、後でなく直ちにファイルを知る必要があります。後でファイルを取得するまで待つと、runLaterスレッドが起動するまでコードが実行され、selectedFileはnullになります。 –