Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a6118039a3 |
@@ -686,14 +686,37 @@ function renderSubStep32(host, back, done) {
|
|||||||
if (installing) return
|
if (installing) return
|
||||||
back()
|
back()
|
||||||
})
|
})
|
||||||
nextBtn.addEventListener('click', function () {
|
nextBtn.addEventListener('click', async function () {
|
||||||
if (installing) return
|
if (installing) return
|
||||||
if (!input.value.trim()) {
|
var val = input.value.trim()
|
||||||
|
if (!val) {
|
||||||
msg.textContent = tt('step3.sub32.pathRequired')
|
msg.textContent = tt('step3.sub32.pathRequired')
|
||||||
msg.classList.add('error')
|
msg.classList.add('error')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
state.serverInstall.jdk = input.value.trim()
|
// 직접 입력/선택한 JDK 도 서버 실행에 충분한 버전(Java 25+)인지 검증한다.
|
||||||
|
// 너무 낮으면 run.bat 이 그 자바를 써도 UnsupportedClassVersionError 로 서버가 안 뜬다.
|
||||||
|
nextBtn.disabled = true
|
||||||
|
msg.classList.remove('success', 'error')
|
||||||
|
msg.textContent = tt('step3.sub32.verifying')
|
||||||
|
try {
|
||||||
|
var v = await installerApi.verifyJdk(val)
|
||||||
|
if (!v || !v.ok) {
|
||||||
|
msg.classList.add('error')
|
||||||
|
msg.textContent = (v && v.major)
|
||||||
|
? tt('step3.sub32.versionTooLow', { major: v.major, required: (v && v.required) || 25 })
|
||||||
|
: tt('step3.sub32.versionUnknown')
|
||||||
|
nextBtn.disabled = false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
msg.classList.add('error')
|
||||||
|
msg.textContent = tt('step3.sub32.versionUnknown')
|
||||||
|
nextBtn.disabled = false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
nextBtn.disabled = false
|
||||||
|
state.serverInstall.jdk = val
|
||||||
done()
|
done()
|
||||||
})
|
})
|
||||||
;(async function () {
|
;(async function () {
|
||||||
|
|||||||
@@ -100,7 +100,10 @@
|
|||||||
"installCanceled": "JDK 설치 취소됨",
|
"installCanceled": "JDK 설치 취소됨",
|
||||||
"installFailed": "JDK 설치 실패: {{message}}",
|
"installFailed": "JDK 설치 실패: {{message}}",
|
||||||
"installError": "JDK 설치 오류: {{message}}",
|
"installError": "JDK 설치 오류: {{message}}",
|
||||||
"pathRequired": "JDK 경로를 입력해 주세요."
|
"pathRequired": "JDK 경로를 입력해 주세요.",
|
||||||
|
"verifying": "선택한 JDK 버전을 확인하는 중…",
|
||||||
|
"versionTooLow": "선택한 Java {{major}} 는 너무 낮습니다. 서버 실행에는 Java {{required}} 이상이 필요합니다. \"자동 설치\" 로 Temurin 25 를 받거나 Java 25 이상 폴더를 선택해 주세요.",
|
||||||
|
"versionUnknown": "선택한 경로에서 Java 실행 파일을 찾지 못했거나 버전을 확인할 수 없습니다. JDK 폴더(bin\\java.exe 가 있는 곳)를 선택하거나 \"자동 설치\" 를 눌러 주세요."
|
||||||
},
|
},
|
||||||
"sub33": {
|
"sub33": {
|
||||||
"heading": "서버 다운로드 및 설치",
|
"heading": "서버 다운로드 및 설치",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "minecraft-music-quiz-installer",
|
"name": "minecraft-music-quiz-installer",
|
||||||
"version": "0.4.4",
|
"version": "0.4.5",
|
||||||
"description": "마인크래프트 음악퀴즈 간편설치기 + 관리 사이트",
|
"description": "마인크래프트 음악퀴즈 간편설치기 + 관리 사이트",
|
||||||
"main": "dist/installer/main.js",
|
"main": "dist/installer/main.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -320,6 +320,15 @@ ipcMain.handle('jdk:detect', async () => {
|
|||||||
return { found: false, path: '' }
|
return { found: false, path: '' }
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 사용자가 직접 입력/선택한 JDK 경로가 서버 실행에 충분한 버전인지 확인한다.
|
||||||
|
// ok=true → major >= 요구 버전(25).
|
||||||
|
// major=0 → 경로에서 java 를 못 찾거나 버전을 못 읽음(실행 실패 등).
|
||||||
|
ipcMain.handle('jdk:verify', async (_event, jdkPath: string): Promise<{ ok: boolean; major: number; required: number }> => {
|
||||||
|
const javaExe = jdkPath ? findJavaExeInHome(jdkPath) : ''
|
||||||
|
const major = javaExe ? getJavaMajor(javaExe) : 0
|
||||||
|
return { ok: major >= REQUIRED_JAVA_MAJOR, major, required: REQUIRED_JAVA_MAJOR }
|
||||||
|
})
|
||||||
|
|
||||||
// ── JDK 자동 설치(Temurin 25, 취소 가능) ──────────────────────────────
|
// ── JDK 자동 설치(Temurin 25, 취소 가능) ──────────────────────────────
|
||||||
interface JdkInstallState {
|
interface JdkInstallState {
|
||||||
controller: AbortController | null
|
controller: AbortController | null
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ const api = {
|
|||||||
|
|
||||||
// 3-2
|
// 3-2
|
||||||
detectJdk: (): Promise<{ found: boolean; path: string }> => ipcRenderer.invoke('jdk:detect'),
|
detectJdk: (): Promise<{ found: boolean; path: string }> => ipcRenderer.invoke('jdk:detect'),
|
||||||
|
verifyJdk: (jdkPath: string): Promise<{ ok: boolean; major: number; required: number }> =>
|
||||||
|
ipcRenderer.invoke('jdk:verify', jdkPath),
|
||||||
installJdk: (): Promise<{ ok: boolean; path?: string; message?: string }> => ipcRenderer.invoke('jdk:install'),
|
installJdk: (): Promise<{ ok: boolean; path?: string; message?: string }> => ipcRenderer.invoke('jdk:install'),
|
||||||
cancelJdkInstall: (): Promise<{ ok: boolean }> => ipcRenderer.invoke('jdk:cancelInstall'),
|
cancelJdkInstall: (): Promise<{ ok: boolean }> => ipcRenderer.invoke('jdk:cancelInstall'),
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user