작성
·
551
답변 10
0
메일 받아보았습니다.
win32방법적용하실 때
"primaryStage.setTitle("유트브앱");" 이 아니라
"primaryStage.setTitle("유튜브앱");" 입니다.
아래코드의 "유튜브앱"과 일치시키셔야 합니다.
"HWND hwnd = User32.INSTANCE.FindWindow(null, "유튜브앱");"
------------------------------------------------------------------------------------
두 가지 방법 모두, "빈 창"에서 작동이 되었다면, 한글경로때문에 문제가 발생한 것 같지는 않습니다.
("빈 창"역시 한글경로가 들어가 있다고 가정할 때입니다.
그래도 혹시 모르니 파일경로에 한글이 포함되어 있지 않도록 하시고, 파일이름도 한글로 짓지 않도록 하세요.)
---------------------------------------------------------------------------------------
마지막으로 해 볼수 있는 행동은
유튜브앱코드쪽에서 "빈 창"코드쪽(정상으로 작동 되는 쪽)으로 부분적으로 하나씩 옮기면서 실행시켜보는 겁니다.
하나씩 옮길 때마다 실행시키는 겁니다.
그리고 어느 부분에서 작동이 되지 않는 지 확인해주세요.
일단 메일로 제가 작성한 포트가 들어간 코드를 보냈습니다.
(파일을 이클립스안으로 통으로 이동시키시면,
첫 라인의 주석을 참고해서, 빨간색 표시가 뜨는 아이콘을 클릭한 후 "Add package~"를 더블클릭해서 선택합니다.)
0
0
0
만약 위처럼 해도 정말로 작동이 안된다면, win32(윈도우즈프로그래밍)방법을 소개하겠습니다.
1.아래의 라이브러리 2개를 모두 다운받고, lib폴더로 이동시킨 후 등록시킵니다.
2.아래와 같이 코드를 작성합니다.
복사붙여넣기용
import javafx.application.Application;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.image.Image;
import javafx.stage.Stage;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef.HWND;
public class ProblemTest extends Application {
@Override
public void start(Stage primaryStage) {
checkIfRunning();
primaryStage.show();
primaryStage.setTitle("유튜브앱");
}
public static void main(String[] args) {
launch(args);
}
public void checkIfRunning() {
try {
HWND hwnd = User32.INSTANCE.FindWindow(null, "유튜브앱");
// "동일한 앱타이틀"을 가진 프로세스가 존재하면 경고창 띄우기
if (hwnd != null) {
System.out.println("이미 실행중");
Alert alert = new Alert(AlertType.INFORMATION);
Stage stage = (Stage) alert.getDialogPane().getScene().getWindow();
stage.getIcons().add(new Image(getClass().getResourceAsStream("assets/warning.png")));
alert.setTitle("Warning");
alert.setHeaderText("이미 유튜브앱이 실행중입니다.");
alert.showAndWait();
System.exit(1);
}
} catch (Exception e) {
System.out.println("JNA 에러");
}
}
}
0
빈 창으로 프로세스를 한 번만 실행시키는 코드입니다.
(안되면 포트번호도 한 번 바꿔보시구요. 이것 저것 시도해보는 게 중요합니다.)
제대로 작동한다면 이를 유튜브앱소스에 끼워넣으시면 됩니다.
복사붙여넣기용 코드
public class ProblemTest extends Application {
int port = 9900;
@Override
public void start(Stage primaryStage) {
checkIfRunning();
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
//warning이미지 파일이 assets폴더안에 있지 않으면 에러가 납니다. 이미지파일을 올바른 위치에 두셔야 합니다.
public void checkIfRunning() {
try {
ServerSocket socket = new ServerSocket(port, 0, InetAddress.getByAddress(new byte[] { 127, 0, 0, 1 }));
System.out.println("9900포트할당");
} catch (Exception e) {
System.out.println("이미 실행중");
Alert alert = new Alert(AlertType.INFORMATION);
Stage stage = (Stage) alert.getDialogPane().getScene().getWindow();
stage.getIcons().add(new Image(getClass().getResourceAsStream("assets/warning.png")));
alert.setTitle("Warning");
alert.setHeaderText("이미 유튜브앱이 실행중입니다.");
alert.showAndWait();
System.exit(1);
}
}
}
0
0
exe파일이 있는 위치에서 assets폴더를 만드시고 그 안에 list.asx파일을 생성하시면 됩니다. 이클립스환경과 동일하게 맞춰주면 됩니다.
프로세스문제는 분명 예제가 제대로 작동했으니까 해결될 거라고 생각하는 데요.
계속 포트할당메세지가 뜨는 건가요?
0
위 처럼 했는데 해결이 안되네요...
그리고 마지막까지 강의를 들었는데 유트앱관리 중간에 실행파일 만들기가 있고 팟플레이까지 한거까지 실행파일로 만들고 싶거든요. 방법 관련해서 설명 부탁드려요.
0
일단, 콘솔탭(Console) 화면부분에서 마우스 오른쪽 클릭해서 나오는 옵션인 Terminate/Disconnect All을 선택해서
모든 프로세스를 종료시켜주시고 다시 한번 테스트해보세요.