私はJavaの専門家でも日食の専門家でもありません。現在、私はプロジェクトに取り組んでおり、頻繁にデバッグ/テストする必要があります。私はそれのために日食実行ボタンを使用します。しかし、プログラムを閉じないと、eclipse / javaが再び開きます(2番目のウィンドウ)。これは、swingjframeを備えたGUIアプリです。
以前のビルドを終了し、実行時に新しいビルドを開く関数がEclipseまたはJavaにありますか?
次の方法を試してください。
デバッグの観点から、実行中のインスタンスを右クリックして[終了して再起動]をクリックできます(これのショートカットは、[ウィンドウ]->[設定]->[一般]->[キー]からバインドできます)これは私にとってはうまくいきました。
このリンクは、どのような見通しでも「終了と再起動」をバインドできることを示しています。試してみることができますが、同じことがうまくいきませんでした。
このプラグインhttps://bitbucket.org/mantis78/relaunch-pluginを使用します(試されていません)。
eclipseでは、アプリケーションを実行/デバッグすると、新しいインスタンスが作成されます。2つのオプションがあります。
アプリケーションを実行すると、コンソールでUI/結果が開きます。したがって、次のいずれかをクリックして、既存のアプリケーションを停止する必要があります。
デバッグモードでは、同じことを行う必要があります。
または、コードでこれを処理する必要があります。このスレッドを確認してください:Eclipse-RCPアプリケーションを単一のインスタンスに制限する方法は?
これがお役に立てば幸いです。
別の最速の(私にとって)ソリューションを追加するだけです:
起動する前に、を押しctrl-F2
ます。
このショートカットは、現在実行中/デバッグ中のアプリケーションを終了します。
問題は日食ではなく、アプリケーションの実装方法にあると思います。詳細については、以下のURLを参照してください。上記の解決策は有効ですが、アプリが日食の外で実行されている場合は問題が発生します。ユーザーがアプリを起動して閉じるたびに、新しいjvmインスタンスが起動されます。
これは本当に遅いですが、ねえ、決して遅くないよりはましです。すべてを初期化するときはstart()を使用します。JFrameを使用している場合は、start(Jframe frame)を使用して、プログラムが手動で閉じられたときに自動的に処理されるようにします。そうでない場合は、プログラムを手動で終了するときにonClose()を呼び出してください。そうしないと、次回は起動しません。
package your.package;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import javax.swing.JFrame;
public class ReLaunch {
private static boolean relaunchClose = false;
private static File runCheck = new File("run.check");
private static File deleteCheck = new File("delete.check");
/**
* Use ReLaunch to stop multiple instances
*/
public static void start() {
//Check to see if application is already running
if(runCheck.exists()) {
//Mark a request to exit the existing application
try { deleteCheck.createNewFile(); } catch (IOException e) { e.printStackTrace(); }
//Wait until the existing application terminates itself
while(runCheck.exists());
//Remove the delete request so current application doesn't terminate
if(deleteCheck.exists()) deleteCheck.delete();
}
//Mark that this application is currently running
try { runCheck.createNewFile(); } catch (IOException e) { e.printStackTrace(); }
//Creates a new thread that checks if a new application is requesting to run
new Thread(new Runnable() {
public void run() {
//Wait until delete request shows up
while(!deleteCheck.exists());
//Proof that the application is closed to be re-launched
relaunchClose = true;
//Unmarks this application as running
if(runCheck.exists()) runCheck.delete();
//Terminated so new application can run
System.exit(0);
}
}).start();
}
/**
* Same as start, but automatically handles when the frame is closed by the user by marking that no applications are running
* @param frame JFrame which needs to be closed
*/
public static void start(JFrame frame) {
start();
//Listen for when the window is manually closed
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent event) {
onClose();
}
});
}
/**
* Marks this application as not running if it is exited manually
*/
public static void onClose() {
if(!relaunchClose) runCheck.delete();
}
}
停止ボタンを押すだけです。または終了ボタンでセッションを閉じます