我不明白为什么我不能总是从'listener'或'handler'中访问变量.
这是我的代码:
Button btnDownload = new Button(myparent, SWT.NONE);
btnDownload.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
btnDownload.setEnabled(false); // I CAN'T
}
});
Run Code Online (Sandbox Code Playgroud)
唯一的方法是使用final关键字声明它:
final Button btnDownload = new Button(myparent, SWT.NONE);
Run Code Online (Sandbox Code Playgroud)
为什么我需要声明变量final以获取事件内的访问权限?
我正在为我的家人制作档案.没有语法错误,但每当我输入时"Maaz",它的计算结果realName == "Maaz"为false并转到else语句.
import java.util.Scanner;
public class MainFamily {
public static void main (String [] args) {
System.out.println("Enter you're name here");
Scanner name = new Scanner(System.in);//Scanner variable = name
String realName;
realName = name.nextLine();//String variable = user input
System.out.println("Name: "+ realName);
if (realName == "Maaz") {
System.out.println("Name: Maaz");
} else {
System.out.println("This person is not in the database");
}
}
}
Run Code Online (Sandbox Code Playgroud) 我在使用通过相对URL访问的字体时遇到问题.
@font-face {
font-family: 'ElegantIcons';
src:url('../src_main/fonts/ElegantIcons.eot');
src:url('../src_main/fonts/ElegantIcons.ttf') format('truetype'),
url('../src_main/fonts/ElegantIcons.svg#ElegantIcons') format('svg'),
url('../src_main/fonts/ElegantIcons.woff') format('woff'),
url('../src_main/fonts/ElegantIcons.eot?#iefix') format('embedded-opentype');
font-weight: normal;
font-style: normal;
}
Run Code Online (Sandbox Code Playgroud)
当我访问网页时,字体不起作用,在控制台中,我得到了这个:
downloadable font: download failed (font-family: "ElegantIcons" style:normal weight:normal stretch:normal src index:1): status=2147500037
source: file:///...snipped.../src_main/fonts/ElegantIcons.woff @ file:///...snipped.../src_poke/fonts-style.css
Run Code Online (Sandbox Code Playgroud)
通过将URL复制/粘贴到浏览器地址栏来访问文件,可以看到它是正确的URL,因为我可以下载该字体.
正如所述,==运算符比较对象引用以检查它们是否引用堆上的同一对象.如果是这样,我为什么要获得这段代码的"平等"?
public class Salmon {
public static void main(String[] args) {
String str1 = "Str1";
String str2 = "Str1";
if (str1 == str2) {
System.out.println("Equal");
} else {
System.out.println("Not equal");
}
}
}
Run Code Online (Sandbox Code Playgroud) 使用整数标志和按位运算是减少高容量对象的内存占用的有效方法吗?
记忆足迹
我的理解是,通常将a boolean存储为intJVM实现中的一个.它是否正确?在这种情况下,32个标志肯定代表了大量的内存占用减少.
虽然JVM实现当然有所不同,但情况可能并非总是如此.
性能
我的理解是,CPU是非常数字驱动的,并且按位操作与计算中的内容一样高效.
在布尔运算中使用按位运算会有性能损失 - 甚至是增益吗?
备择方案
有没有更好的方法来完成同样的事情?Enum是否允许组合标志,即FLAGX = FLAG1 | FLAG2?
注意,最后一个方法propogateMove()是递归的,可能每秒被调用数百次,并且直接影响我们应用程序的响应性,因此使用标志来避免逻辑位并调用其他方法.
// FLAGS helper functions
private final void setclear(int mask, boolean set) { if (set) set(mask); else clear(mask); }
private final void set(int mask) { flags |= mask; }
private final void clear(int mask) { flags &= ~mask; }
private final boolean test(int mask) { return ((flags & mask) == mask); }
// Flags //////////////////////////////////////////////////////////////////////
private …Run Code Online (Sandbox Code Playgroud) 当我在Java中尝试以下内容时:
System.out.println(System.getProperty("file.encoding"));
我得到cp1252编码.
有没有办法知道这个价值来自哪里?(像环境变量或其他东西)
我想在Windows XP上使用systeminfo之类的命令在命令提示符下打印编码值.
我已经看了好几个月了,到目前为止这是我提出的最好的.
由于我们的应用程序以这种方式运行并且不会被重写,因此结构(在EDT之外呈现)不值得辩论.该应用程序具有布局模型和脚本模型,它们是集成的并且驱动渲染,因此渲染必须在AWT绘制模型之外执行.
我想要达到的是执行自定义渲染的最佳和可靠的方法.
以下SSCCE对我们来说效果很好.但是,在帧大小调整期间,它有两个缺点:
同样有用的是输入这是否是在EDT之外发生的自定义渲染路径的最佳方法.我尝试过最多,并做了相当广泛的研究.这种组合(后备缓冲图像,双缓冲策略)似乎效果最好.
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferStrategy;
public class SmoothResize extends Frame implements ComponentListener, MouseMotionListener {
public SmoothResize() {
addComponentListener(this);
addMouseMotionListener(this);
}
private boolean sizeChanged = false;
private Dimension old = new Dimension(0, 0);
private synchronized void checkSize(String source) {
int width = getWidth();
int height = getHeight();
if (old.width == width && old.height == …Run Code Online (Sandbox Code Playgroud) 在实现自己的渲染而不使用标准Java GUI组件时,使用AWT Frame和Swing JFrame有什么主要区别?
这是上一个问题的后续内容:
关于Swing vs AWT的典型谈话要点似乎并不适用,因为我们只使用框架.例如,重量级和轻量级超出窗口(并且JFrame扩展了Frame).
那么哪种情况最好,JFrame或Frame适用于这种情况?它有什么有意义的区别吗?
注意:这种情况是不希望在EDT中进行渲染的情况.有一个应用程序工作流程没有链接到EDT,渲染是在EDT之外的需要基础上完成的.要使渲染与EDT同步会增加渲染的延迟.除了Frame或JFrame之外,我们不渲染任何Swing或AWT组件(如果最好的话,我们不会渲染封闭的JPanel/Component/etc).
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.image.BufferStrategy;
import java.awt.Frame;
public class SmoothResize extends Frame {
public static void main(String[] args) {
Toolkit.getDefaultToolkit().setDynamicLayout(true);
System.setProperty("sun.awt.noerasebackground", "true");
SmoothResize srtest = new SmoothResize();
//srtest.setIgnoreRepaint(true);
srtest.setSize(100, 100);
srtest.setVisible(true);
}
public SmoothResize() {
render();
}
private Dimension old_size = new Dimension(0, 0);
private Dimension new_size = new Dimension(0, 0);
public void validate() …Run Code Online (Sandbox Code Playgroud) 在代码库中,我们继承了MediaTracker的用法总是在每个代码块中本地完成.
new MediaTracker(new Canvas());
mediatracker.addImage(i, 1);
try {
mediatracker.waitForAll();
} catch (InterruptedException e) { }
mediatracker.removeImage(i);
Run Code Online (Sandbox Code Playgroud)
决定这是低效的,我最终用静态实例和方法替换它:
final static protected MediaTracker mediatracker = new MediaTracker(new Canvas());
static protected void checkImageIsReady(Image i) {
mediatracker.addImage(i, 1);
try {
mediatracker.waitForAll();
} catch (InterruptedException e) { }
mediatracker.removeImage(i);
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,没有任何不良影响.
还有另一种可能的方法 - 将MediaTracker附加到每个组件(通常是Frame或JFrame),这强烈暗示构造函数文档采用的方法.
所以我有两个问题:
如何以及为何使用MediaTracker?
有什么选择?
我需要提取一个“日期字符串”作为代表日期/时间数据的单独列。
| A | B | C
-+--------------------------+-------------------+-----------------
1| Datetime String | Date Value | Time Value
2| Sat 09 Sep 2017 20:00 PM | =DATEVALUE(A2) | =TIMEVALUE(A2)
Run Code Online (Sandbox Code Playgroud)
以上函数DATEVALUE和TIMEVALUE返回错误。我现在有点不知所措。